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

如何扩展图像,使其仍然有效?在Dockerfile中,图像何时可以位于from行中?,docker,Docker,我有一个sshd Dockerfile。它起作用了。我可以用ssh连接到它。我调用了imagelocal/c7sshd 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。它起作用了。我可以用ssh连接到它。我调用了image
local/c7sshd

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
之后

谢谢。

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

您需要做的是更改
CMD
指令,以便它同时启动httpd和sshd。按照MarkO'Connor的建议,最好的方法是使用流程管理器

另外,通常最好在从
ENTRYPOINT
指令调用的脚本中执行此操作,而不是在
CMD
指令中执行此操作,这样您就可以使用
CMD
在运行时为
ENTRYPOINT
脚本提供参数


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

supervisord类似于systemd,但这不是我的意思。我想知道如何扩展图像。