1

この dockerfile を単純に使用したいと思います。

FROM test/tomcat
ENV CATALINA_HOME /tomcat
RUN ${CATALINA_HOME}/bin/catalina.sh start
RUN wget localhost:8080/Writer/WriterServlet

確かに結果は以下の通り

docker build --no-cache=true - < Dockerfile
Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon
Step 0 : FROM test/tomcat
 ---> 2a85ccb3dd07
Step 1 : ENV CATALINA_HOME /tomcat
 ---> Running in 76872d1acdd5
 ---> 30ad1fe832d6
Removing intermediate container 76872d1acdd5
Step 2 : RUN ${CATALINA_HOME}/bin/catalina.sh start
 ---> Running in 5947560a3428
Tomcat started.
 ---> ea670dd1d3ff
Removing intermediate container 5947560a3428
Step 3 : RUN wget localhost:8080/Writer/WriterServlet
 ---> Running in 6aa5c9be8569
--2014-12-19 03:08:16--  http://localhost:8080/Writer/WriterServlet
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:8080... failed: Connection refused.
Connecting to localhost (localhost)|127.0.0.1|:8080... failed: Connection refused.
2014/12/19 11:08:16 The command [/bin/sh -c wget localhost:8080/Writer/WriterServlet] returned a non-zero code: 4

この場合、Tomcat はファイルを書き込むためのインターフェースを提供するため、Tomcat サーバーを介してビルドする必要があります。

おそらく、wget が tomcat の起動を待つことができないためです。

または、docker の階層化されたコンテナー構造により、ステップ 3(wget) で tomcat が再びダウンするためです。

要約すると、私の質問は、インタラクティブな要件のためにいくつかのプロセスを一緒に実行し続けるために docker ビルドを作成できるかということです。

4

1 に答える 1

2

Docker ファイルのビルド手順では、実行中のコンテナーまたはシステムが維持されません。各行はファイル システムに変更を加え、docker は変更をファイル システムにのみ保存します。開始されたプロセスはすべて破棄されます。

Docker は、コンテナーが実行されているとき (コンテナーがビルドされているときではない) にのみ、実行時間の長いプロセスを開始できます。コンテナーの起動時にカスタム スクリプトを呼び出すには、ENTRYPOINT または CMD を使用する必要があります。このスクリプトは、Tomcat を開始して wget を実行し、Tomcat ログのテールなどの長時間実行されるプロセスを開始する前に、必要な変更を行います。

于 2014-12-19T15:37:57.543 に答える