2016-09-20 77 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文件來查看圖像是如何構建的。