[英]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中启动服务,您应使用CMD
或ENTRYPOINT
语句作为最后一行(通常取决于您是否要在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.