如何扩展图像,以便它仍然有效?什么时候图像可以在Dockerfile的from行中?

时间:2015-03-22 08:05:12

标签: docker

我有一个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之后的图像是否可以。

感谢。

1 个答案:

答案 0 :(得分:4)

您已正确“扩展”了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在运行时向ENTRYPOINT脚本。

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