为什么此dockerfile中的RUN命令不起作用

时间:2018-04-29 20:39:08

标签: linux docker

我有一个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服务器。

它可能是什么原因?

2 个答案:

答案 0 :(得分:4)

如果查看构建,可以看到ssh服务在一个中间容器中启动,该容器在下一个构建步骤中被删除:

 ---> Running in a1afe0c2ce71
 * Starting OpenBSD Secure Shell server sshd                             [ OK ]
Removing intermediate container a1afe0c2ce71

要在Dockerfile中启动服务,您应该使用CMDENTRYPOINT语句作为最后一行(取决于您是否希望在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