了解Dockerfile CMD /入口点
问题描述:
我是Docker的新手。试图用传输来构建小图像。 这里是我的Dockerfile:了解Dockerfile CMD /入口点
#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没有看到脚本产生的后台进程。
通常你CMD
或ENTRYPOINT
将运行交互过程,而不是守护进程的版本,你让码头工人采取把容器的背景docker run -d
的照顾。 (CMD
和ENTRYPOINT
之间的实际差异大约是giving users flexibility to run containers from your image in different ways)。
如果您正在查看在容器中运行已建立的应用程序,那么值得检查Docker Hub。 There are a bunch of Transmission images on Docker Hub,你可以直接使用,或者查看他们的Docker文件来查看图像是如何构建的。
与https://hub.docker.com/r/jess/transmission/~/dockerfile/比较,最后两行是'ENTRYPOINT [“/ usr/bin/transmission-daemon”] CMD [“--allowed “,127。*,10。,192.168。*,172.16。*,172.17。*,172.18。*,172.19。*,172.20。*,172.21。*,172.22。*,172.23。*,172.24。*, ,17' – user2915097
你说'它运行,显示传输帮助和退出.'这是正常的,你要求它显示帮助,完成后,它结束了 – user2915097