1

私はDockerが初めてです。Transmission で小さなイメージを構築しようとしています。これが私の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"]

実行され、Transmission ヘルプが表示され、終了します。Docker がコンテナー内でアプリを実行する方法について、私が見逃していることは何ですか?

4

1 に答える 1

2

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

通常、CMDorENTRYPOINTはデーモン化されたバージョンではなくインタラクティブなプロセスを実行し、docker run -d. ( と の実際の違いは、CMDさまざまな方法でイメージからコンテナーを実行する柔軟性をユーザーに与えることです)。ENTRYPOINT

確立されたアプリをコンテナーで実行することを検討している場合は、Docker Hub を確認する価値があります。Docker Hubには、直接使用できる一連の Transmission イメージがあります。または、Dockerfiles をチェックして、イメージがどのように構築されているかを確認してください。

于 2016-09-20T12:21:50.327 に答える