重新运行bash以便连接到Docker运行实例的最佳实践
这是Docker新手的另一个问题。 我目前使用bash
在“debugging模式”下运行我的Docker镜像,这样我就可以将docker attach
到正在运行的实例,以便在运行时检查应用程序的操作系统环境等。
docker run <image-id> -d -it bash -c “<start application in background>; bash”
我想知道是否应该总是包含bash
, Dockerfile
的CMD
从CMD <start application in foreground>
改为CMD <start application in background>; bash
CMD <start application in background>; bash
。
这在“生产模式”下会不合适
-
出于安全原因 – 谁被允许附加到正在运行的实例?
-
鉴于Docker是一个应用程序隔离工具,而不是一个操作系统虚拟化工具 ,
-
其他原因?
不要在生产中这样做。
您希望您的应用程序成为最前端的进程(PID 1),而不是bash。
理想情况下,您的开发容器将与您的开发容器相同,所以我甚至不会在开发中使用该bash方法,而不是临时testing情况。 如果需要的话,你可以随时将docker exec放入容器中。 例如,
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环境variables。 (例如, export TERM=xterm
)。
只要返回一个结果并closures,就可以忽略-it
例如:
docker exec {container-name} ifconfig
您希望习惯像“一劳永逸”那样处理容器 – 或者至less不是在生产中需要手动访问的东西。