如何扩展图像,使其仍然有效?图像何时可以位于 Dockerfile 的 from 行中?

How can I extend an image, so that it still works? When can an image be in the from line in a Dockerfile?

我有一个 sshd Dockerfile。有用。我可以ssh到它。我将图像命名为 local/c7-sshd

from centos:7
...
expose 22
cmd ["/usr/sbin/sshd","-D"]

现在我想将此图像扩展为 httpd 图像。我有一个 Dockerfile,

from local/c7-sshd
...
expose 80
cmd ["/usr/sbin/httpd","-D","FOREGROUND"]

当我从此映像启动容器时,httpd 运行,但 sshd 不运行。

所以我不知道图像何时可以在 Dockerfile 中的 from 之后。

谢谢。

您正确地 "extended" c7-sshd 图像。问题在于 httpd 映像中的 CMD 指令替换了 c7-sshd 映像中的 CMD 指令,因此仅启动了 httpd,没有启动 sshd。每个图像只能有一个 CMD 指令,当容器启动时是 运行。

您需要做的是更改 CMD 指令,使其同时启动 httpd 和 sshd。按照 Mark O'Connor https://docs.docker.com/articles/using_supervisord/.

的建议,使用流程管理器执行此操作的最佳方法

此外,通常最好在从 ENTRYPOINT 指令而不是 CMD 调用的脚本中执行此操作,这样您就可以使用 CMD 在 [=29] 处提供参数=]-ENTRYPOINT 脚本的时间。

最后,你真的需要sshd吗?您可能会发现使用 docker exec -it CONTAINER /bin/bash 是更好的解决方案。