这是来自Docker新手的另一个问题。我目前在"调试模式"中运行我的Docker镜像。使用bash
以便我可以docker attach
运行实例进入shell,我可以在运行时检查应用程序的OS环境等。
docker run <image-id> -d -it bash -c “<start application in background>; bash”
我想知道我是否应该始终包含bash
,即将CMD
内的Dockerfile
从CMD <start application in foreground>
更改为CMD <start application in background>; bash
。
在生产模式&#34;
中这是不合适的出于安全原因 - 谁可以附加到正在运行的实例?
鉴于Docker是application isolation tool, not an OS virtualization tool,
出于其他原因?
答案 0 :(得分:3)
不要在制作中这样做。
您希望自己的应用成为最前端的进程(PID 1),而不是bash。
理想情况下,您的开发容器将与您的生产容器相同,因此除了临时测试情况之外,我甚至不会在开发中使用该bash方法。如果需要,您可以随后xview
进入容器。如,
docker exec -it {container-name} /bin/bash
其中:
> -i, --interactive Keep STDIN open even if not attached > -t, --tty Allocate a pseudo-TTY
根据需要更改可执行文件的名称(例如,/bin/sh
等)。您需要为某些容器设置TERM环境变量。 (例如,export TERM=xterm
)。
要返回结果并关闭,请忽略-it
,如:
docker exec {container-name} ifconfig
您希望习惯于处理像“一劳永逸”这样的容器 - 或者至少不是您在生产中需要手动访问的东西。