我有一个docker镜像(MyBaseImage),我安装了Open SSH服务器。现在在docker文件中,我有以下内容。
#Download base image
FROM MyBaseImage
RUN service ssh start
我通过输入
来构建新图像 docker build .
Docker可以很好地构建图像,并提供以下信息。
Step 1/2 : FROM MyBaseImage
---> 56f88e347f77
Step 2/2 : RUN service ssh start
---> Running in a1afe0c2ce71
* Starting OpenBSD Secure Shell server sshd [ OK ]
Removing intermediate container a1afe0c2ce71
---> 7879cebe8b6a
但是当我通过输入
来运行新图像时 docker run -it 7879cebe8b6a
在容器的终端
中键入以下内容 service ssh status
给出
* sshd is not running
然后我必须通过键入service ssh start
手动启动Open SSH服务器。
它可能是什么原因?
答案 0 :(得分:4)
如果查看构建,可以看到ssh服务在一个中间容器中启动,该容器在下一个构建步骤中被删除:
---> Running in a1afe0c2ce71
* Starting OpenBSD Secure Shell server sshd [ OK ]
Removing intermediate container a1afe0c2ce71
要在Dockerfile中启动服务,您应该使用CMD
或ENTRYPOINT
语句作为最后一行(取决于您是否希望在docker run ...
中传递参数命令,通常。
通常,服务将作为后台程序在后台启动,因此将此作为最后一行:
CMD ["service", "ssh", "start"]
无法正常工作,因为容器会因为没有任何操作而退出
您可能想要的(来自docker docs)是:
CMD ["/usr/sbin/sshd", "-D"]
在前台启动服务,以便容器保持活力
This链接提供了有关CMD与&之间差异的有用信息。 ENTRYPOINT,以及exec& shell格式。
答案 1 :(得分:-3)
根据您使用的linux发行版命令略有变化。
如果你使用的是ubuntu,你的启动命令应该可行。
但如果您的基本图片是centos / RHEL,请尝试service sshd start