我有一个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"]

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

This链接提供了有关CMD和ENTRYPOINT之间的区别以及exec和shell格式之间的区别的有用信息。

关于linux - 为什么此dockerfile中的RUN命令不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50091070/

10-10 17:53
查看更多