了解Dockerfile CMD /入口点

我是Docker的新手。 试图build立与传输的小图像。 这是我的Dockerfile

#base image FROM alpine:latest #install Transmission RUN apk update RUN apk add transmission-daemon #expose port EXPOSE 9091 #start app CMD ["/usr/bin/transmission-daemon"] 

然后我启动容器:

 docker run transmission 

它立即退出。 我认为它将继续运行,因为传输守护进程应该保持运行。 我也尝试了ENTRYPOINT ,但结果是一样的。 但是,下一个版本按预期工作:

 ENTRYPOINT ["/usr/bin/transmission-daemon"] CMD ["-h"] 

它运行,显示传输帮助和退出。 我错过了Docker如何在容器内部运行应用程序?

只要容器启动的进程处于活动状态,Docker就会保持容器运行。 如果您的容器在运行时启动守护进程,那么守护进程启动脚本就是Docker监视的进程。 当完成时,容器退出 – 因为Docker没有看到脚本产生的后台进程。

通常,您的CMDENTRYPOINT将运行交互式进程而不是守护进程版本,并且让Docker负责使用docker docker run -d将容器放在后台。 ( CMDENTRYPOINT之间的实际区别是让用户能够灵活地以不同的方式从图像中运行容器 )。

如果您正在查看在容器中运行已build立的应用程序,则需要检查Docker Hub。 在Docker Hub上有一堆传输图像可以直接使用,或者查看他们的Docker文件来查看图像是如何构build的。

Interesting Posts