2016-09-20 128 views
1

我是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如何在容器内运行应用程序的问题?

+0

与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

+0

你说'它运行,显示传输帮助和退出.'这是正常的,你要求它显示帮助,完成后,它结束了 – user2915097

回答

3

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

通常你CMDENTRYPOINT将运行交互过程,而不是守护进程的版本,你让码头工人采取把容器的背景docker run -d的照顾。 (CMDENTRYPOINT之间的实际差异大约是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文件来查看图像是如何构建的。