如何扩展图像,使其仍然有效?镜像什么时候可以出现在 Dockerfile 的 from 行中?

eri*_*icj 4 docker

我有一个 sshd Dockerfile。有用。我可以通过 ssh 连接到它。我把图像称为local/c7-sshd.

from centos:7
...
expose 22
cmd ["/usr/sbin/sshd","-D"]
Run Code Online (Sandbox Code Playgroud)

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

from local/c7-sshd
...
expose 80
cmd ["/usr/sbin/httpd","-D","FOREGROUND"]
Run Code Online (Sandbox Code Playgroud)

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

所以我不知道什么时候可以from在 Dockerfile 中添加镜像。

谢谢。

Adr*_*uat 5

您已正确“扩展”c7-sshd 映像。问题是CMDhttpd 映像中的指令替换了CMDc7-sshd 映像中的指令,因此仅启动了 httpd,而不启动了 sshd。每个镜像只能有一条CMD在容器启动时运行的指令。

您需要做的是更改CMD指令,以便它同时启动 httpd 和 sshd。按照 Mark O'Connor 的建议,最好的方法是使用进程管理器https://docs.docker.com/articles/using_supervisord/

此外,通常最好在从指令调用的脚本中执行此操作,ENTRYPOINT而不是在 中CMD执行此操作,以便您可以CMD在运行时向ENTRYPOINT脚本提供参数。

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