我有一个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"]
它将在前台启动服务,以便容器保持 Activity 状态
This链接提供了有关CMD和ENTRYPOINT之间的区别以及exec和shell格式之间的区别的有用信息。
关于linux - 为什么此dockerfile中的RUN命令不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50091070/