重新运行bash以便连接到Docker运行实例的最佳实践

这是Docker新手的另一个问题。 我目前使用bash在“debugging模式”下运行我的Docker镜像,这样我就可以将docker attach到正在运行的实例,以便在运行时检查应用程序的操作系统环境等。

 docker run <image-id> -d -it bash -c “<start application in background>; bash” 

我想知道是否应该总是包含bashDockerfileCMDCMD <start application in foreground>改为CMD <start application in background>; bash CMD <start application in background>; bash

这在“生产模式”下会不合适

  1. 出于安全原因 – 谁被允许附加到正在运行的实例?

  2. 鉴于Docker是一个应用程序隔离工具,而不是一个操作系统虚拟化工具 ,

  3. 其他原因?

不要在生产中这样做。

您希望您的应用程序成为最前端的进程(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不是在生产中需要手动访问的东西。