繁体   English   中英

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

[英]Why the RUN command in this dockerfile is not working

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

可能是什么原因呢?

如果您查看构建,则可以看到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"]

它将在前台启动服务,以便容器保持活动状态

链接包含有关CMD和ENTRYPOINT之间的区别以及exec和shell格式之间的区别的有用信息。

根据您使用的Linux发行版,命令会稍有变化。

如果您正在使用ubuntu,则启动命令应该可以使用。 但是,如果您的基本映像是centos / RHEL,请尝试使用service sshd start

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM