如何用docker run命令执行脚本而不退出 如何避免Docker容器启动脚本运行后自动退出

\u5982\u4f55\u7528docker run\u547d\u4ee4\u6267\u884c\u811a\u672c\u800c\u4e0d\u9000\u51fa

docker
run\u6307\u5b9a\u7684\u547d\u4ee4\u5982\u679c\u4e0d\u662f\u90a3\u4e9b\u4e00\u76f4\u6302\u8d77\u7684\u547d\u4ee4\uff08\u6bd4\u5982\u8fd0\u884ctop\uff0c\u4e0d\u65adecho\uff09\uff0c\u5c31\u662f\u4f1a\u81ea\u52a8\u9000\u51fa\u7684\u3002-d\u547d\u4ee4\u662f\u8bbe\u7f6edetach\u4e3atrue\uff0c\u6839\u636e\u5b98\u65b9\u7684\u6587\u6863\uff0c\u610f\u601d\u662f\u8ba9\u8fd9\u4e2a\u547d\u4ee4\u5728\u540e\u53f0\u8fd0\u884c\uff0c\u4f46\u5e76\u4e0d\u662f\u4e00\u76f4\u8fd0\u884c\uff08\u6211\u4eec\u5728\u4e00\u4e2a\u6b63\u5e38\u7684Linux
Terminal\u4e2d\u8fd0\u884c/bin/bash\uff0c\u8fd0\u884c\u5b8c\u4e86\u4e5f\u5c31\u5b8c\u4e86\uff0c\u4e0d\u4f1a\u4e00\u76f4\u6302\u7740\u7b49\u5f85\u54cd\u5e94\u7684\uff0c\u6240\u4ee5\u786e\u5b9e\u6ca1\u529e\u6cd5\u7528daemon\u65b9\u5f0f\u6765\u8dd1/bin/bash\uff09\u3002
\u8fd9\u4e2a\u5730\u65b9\u5b98\u65b9\u65e9\u671f\u548c\u73b0\u5728\u7684\u6587\u6863\u4e5f\u786e\u5b9e\u6709\u4e9b\u524d\u540e\u4e0d\u4e00\u81f4\uff0c\u73b0\u5728\u662fdetach\uff0c\u65e9\u671f\u7684\u6587\u6863\u8bf4\u6307\u5b9a-d\u4ee5daemon\u65b9\u5f0f\u6765\u8fd0\u884c\u5bb9\u5668\uff0c\u53ef\u80fd\u5b58\u5728\u4e00\u5b9a\u7684\u8bef\u89e3\u3002
\u53e6\u5916\uff0c\u5982\u679c\u4f60\u9700\u8981\u8dd1\u5bb9\u5668\u91cc\u7684bash\uff0c\u76f4\u63a5\u8fd0\u884cdocker
run
-i
-t
CONTAINER_NAME
/bin/bash
\u5c31\u53ef\u4ee5\u4e86\uff0c\u5982\u679c\u89c9\u5f97\u53c2\u6570\u6bd4docker
attach\u591a\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2a\u522b\u540d\uff08alias\uff09\u6765\u89e3\u51b3\uff1a
alias
dockerbash='docker
run
-i
-t
CONTAINER_ID
/bin/bash'
\u8bbe\u7f6e\u597d\u522b\u540d\u540e\uff0c\u76f4\u63a5\u8fd0\u884cdockerbash\u5c31\u53ef\u4ee5\u8fdb\u5165\u5bb9\u5668\u7684bash\u4e86

\u3000\u3000\u907f\u514dDocker\u5bb9\u5668\u542f\u52a8\u811a\u672c\u8fd0\u884c\u540e\u81ea\u52a8\u9000\u51fa\u7684\u89e3\u51b3\u529e\u6cd5
docker
run\u6307\u5b9a\u7684\u547d\u4ee4\u5982\u679c\u4e0d\u662f\u90a3\u4e9b\u4e00\u76f4\u6302\u8d77\u7684\u547d\u4ee4\uff08\u6bd4\u5982\u8fd0\u884ctop\uff0c\u4e0d\u65adecho\uff09\uff0c\u5c31\u662f\u4f1a\u81ea\u52a8\u9000\u51fa\u7684\u3002-d\u547d\u4ee4\u662f\u8bbe\u7f6edetach\u4e3atrue\uff0c\u6839\u636e\u5b98\u65b9\u7684\u6587\u6863\uff0c\u610f\u601d\u662f\u8ba9\u8fd9\u4e2a\u547d\u4ee4\u5728\u540e\u53f0\u8fd0\u884c\uff0c\u4f46\u5e76\u4e0d\u662f\u4e00\u76f4\u8fd0\u884c\uff08\u6211\u4eec\u5728\u4e00\u4e2a\u6b63\u5e38\u7684Linux
Terminal\u4e2d\u8fd0\u884c/bin/bash\uff0c\u8fd0\u884c\u5b8c\u4e86\u4e5f\u5c31\u5b8c\u4e86\uff0c\u4e0d\u4f1a\u4e00\u76f4\u6302\u7740\u7b49\u5f85\u54cd\u5e94\u7684\uff0c\u6240\u4ee5\u786e\u5b9e\u6ca1\u529e\u6cd5\u7528daemon\u65b9\u5f0f\u6765\u8dd1/bin/bash\uff09\u3002\u8fd9\u4e2a\u5730\u65b9\u5b98\u65b9\u65e9\u671f\u548c\u73b0\u5728\u7684\u6587\u6863\u4e5f\u786e\u5b9e\u6709\u4e9b\u524d\u540e\u4e0d\u4e00\u81f4\uff0c\u73b0\u5728\u662fdetach\uff0c\u65e9\u671f\u7684\u6587\u6863\u8bf4\u6307\u5b9a-d\u4ee5daemon\u65b9\u5f0f\u6765\u8fd0\u884c\u5bb9\u5668\uff0c\u53ef\u80fd\u5b58\u5728\u4e00\u5b9a\u7684\u8bef\u89e3\u3002
\u53e6\u5916\uff0c\u5982\u679c\u4f60\u9700\u8981\u8dd1\u5bb9\u5668\u91cc\u7684bash\uff0c\u76f4\u63a5\u8fd0\u884cdocker
run
-i
-t
CONTAINER_NAME
/bin/bash
\u5c31\u53ef\u4ee5\u4e86\uff0c\u5982\u679c\u89c9\u5f97\u53c2\u6570\u6bd4docker
attach\u591a\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2a\u522b\u540d\uff08alias\uff09\u6765\u89e3\u51b3\uff1a
alias
dockerbash='docker
run
-i
-t
CONTAINER_ID
/bin/bash'\u8bbe\u7f6e\u597d\u522b\u540d\u540e\uff0c\u76f4\u63a5\u8fd0\u884cdockerbash\u5c31\u53ef\u4ee5\u8fdb\u5165\u5bb9\u5668\u7684bash\u4e86

docker run指定的命令如果不是那些一直挂起的命令(比如运行top,不断echo),就是会自动退出的。-d命令是设置detach为true,根据官方的文档,意思是让这个命令在后台运行,但并不是一直运行(我们在一个正常的Linux Terminal中运行/bin/bash,运行完了也就完了,不会一直挂着等待响应的,所以确实没办法用daemon方式来跑/bin/bash)。
这个地方官方早期和现在的文档也确实有些前后不一致,现在是detach,早期的文档说指定-d以daemon方式来运行容器,可能存在一定的误解。

另外,如果你需要跑容器里的bash,直接运行docker run -i -t CONTAINER_NAME /bin/bash 就可以了,如果觉得参数比docker attach多,可以设置一个别名(alias)来解决:

alias dockerbash='docker run -i -t CONTAINER_ID /bin/bash'
设置好别名后,直接运行dockerbash就可以进入容器的bash了

扩展阅读:docker 进入容器 ... docker所有命令大全 ... docker attach ... docker run root ... docker images ... docker commit ... docker run命令 ... docker被禁 ... 为什么docker被淘汰了 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网