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

我有一个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中是否有一个图像可以被删除。

谢谢。

您已经正确“扩展”了c7-sshd映像。 问题在于httpd映像中的CMD指令replace了c7-sshd映像中的CMD指令,所以只有httpd正在启动,而不是sshd。 每个图像只能有一个单独的CMD指令,在容器启动时运行。

你需要做的是改变CMD指令,以便启动httpd和sshd。 使用Mark O'Connorbuild议的stream程pipe理器最好的方法是https://docs.docker.com/articles/using_supervisord/

另外,在一个由ENTRYPOINT指令而不是CMD调用的脚本中执行此操作通常会更好,因此您可以使用CMD在运行时向ENTRYPOINT脚本提供参数。

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