最佳实践重新运行bash以附加到Docker运行实例

时间:2016-07-18 02:07:38

标签: security docker

这是来自Docker新手的另一个问题。我目前在"调试模式"中运行我的Docker镜像。使用bash以便我可以docker attach运行实例进入shell,我可以在运行时检查应用程序的OS环境等。

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

我想知道我是否应该始终包含bash,即将CMD内的DockerfileCMD <start application in foreground>更改为CMD <start application in background>; bash

在生产模式&#34;

中这是不合适的
  1. 出于安全原因 - 谁可以附加到正在运行的实例?

  2. 鉴于Docker是application isolation tool, not an OS virtualization tool

  3. 出于其他原因?

1 个答案:

答案 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

您希望习惯于处理像“一劳永逸”这样的容器 - 或者至少不是您在生产中需要手动访问的东西。