2016-09-20 11 views
1

Dockerを初めて使用しました。 Transmissionで小さな画像を構築しようとしています。ここ は私Dockerfileです:Dockerfileの理解CMD/ENTRYPOINTについて

#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/と比較してください。最後の2行は 'ENTRYPOINT ["/usr/bin/transmission-daemon "]です。CMD [" --allowed 172.12。*、172.21。*、172.21。*、172.22。*、172.23。*、172.24。*、172.24。*、172.14。*​​、172.16。 、17' – user2915097

+0

あなたは 'それは走って、送信の助けと終了を表示する'と言うこれは正常です、あなたはそれが完了したら、ヘルプを表示するように頼む – user2915097

答えて

3

Dockerは、コンテナが起動するプロセスがアクティブである限り、コンテナを実行し続けます。コンテナが実行されたときにデーモンを起動すると、デーモン起動スクリプトはDockerが監視するプロセスです。それが完了すると、Dockerはスクリプトが生成するバックグラウンドプロセスを見ていないので、コンテナは終了します。

通常、CMDまたはENTRYPOINTは、デーモン化されたバージョンではなく対話型プロセスを実行し、Dockerはdocker run -dで背景にコンテナを置くようにします。 (CMDENTRYPOINTの実際の差は約giving users flexibility to run containers from your image in different waysです)。

コンテナ内に確立されたアプリを実行することを検討している場合は、Dockerハブをチェックする価値があります。 There are a bunch of Transmission images on Docker Hubを直接使用するか、Dockerfilesをチェックアウトしてイメージの構築方法を確認してください。

関連する問題