2016-11-10 8 views
0

dockerはビルドフェーズ中にjava/undertowアプリケーションを起動する必要があり、実行フェーズで利用できるはずです。ただし、Javaプロセスの起動後は、Javaサーバーの起動に関連するコンテナの変更は保持されません。dockerコンテナはバックグラウンドでJavaを起動しません

この手順で行った変更はイメージに影響しません。

私のドッキングウィンドウのファイルの最後のコマンドは、私はこのコンテナを実行したとき、私はその出力がserver.logファイルを確認し、正常

StartServices  - Services Started 

開始サーバーしかし、ときに存在して見ることができます

RUN java -jar /svc/app/svc-0.0.1-SNAPSHOT.jar $2>server.log & sleep 5 

であるIサービスを実行していない場合はコンテナを実行します。私はそれを手動で始めることができますが、私はそれをやりたいとは思いません。コンテナが稼働しているときに私のサーバをアップさせたい。

お知らせ

& sleep 5 

私はこれらの5秒間待っていない場合は、それが作成されていないすべてのログになります。 Dockerは、Javaアプリケーションを起動させずにすぐにこのステップを放棄します。

でも "スリープ5"でも私のアプリケーションは起動しますが、ドッカーはイメージの変更を無視し、それらを適用しません。

「ドッカーを実行する」と、アプリケーションが実行されていません。ここ

はDockerfileです:

FROM anapsix/alpine-java 
ENV TC_BASE=/opt/tc_base 
ENV APP_BASE=$TC_BASE/svc 
ENV PATH=.:$PATH 


RUN apk update && apk add unzip 


COPY files/build/lib/svc/target/svc-0.0.1-SNAPSHOT-bin.zip $APP_BASE/ 
COPY files/build/lib/api/src/main/resources/api.properties $TC_BASE/conf/api/ 
COPY files/build/lib/svc/src/main/resources/svc.properties $TC_BASE/conf/svc/ 
COPY files/build/lib/svc/src/main/resources/logback.xml $TC_BASE/conf/svc/ 

RUN cd $APP_BASE ; unzip -q svc-0.0.1-SNAPSHOT-bin.zip ; rm svc-0.0.1-SNAPSHOT-bin.zip ; mv svc-0.0.1-SNAPSHOT/* . ; rm -rf svc-0.0.1-SNAPSHOT 

EXPOSE 7009 

RUN java -jar $TC_BASE/svc/app/svc-0.0.1-SNAPSHOT.jar $2>server.log & sleep 5 
+0

待機中のプロセスがない場合、Dockerは常にコンテナを停止します。 'tail -f server.log' –

+0

我々は建物のイメージについて話しています。この段階ではサーバーログに関心のある人はいません。 tail -f server.logを実行すると、ビルドプロセスは決して終了しません。 Javaプロセスは、イメージセットアップの一部としてバックグラウンドで実行する必要があります。 –

+3

コンテナの実行時に実行する必要がある場合は、 'ENTRYPOINT'または' CMD'(またはその組み合わせ)に入れる必要があります。それが複数のことを編成して開始するのであれば、エントリポイントスクリプトが必要になるかもしれません。これはちょっと乱雑に聞こえる。なぜコンテナ内で複数のものを実行する必要がありますか? – johnharris85

答えて

1

まあ、それは実行しないENTRYPOINTでなければなりません。 Entrypointは、コンテナが起動するときに呼び出され、必要なものです。 RUNはビルド時に実行されますが、ファイルシステムにのみ影響します。 Dockerイメージにはアプリケーションの実行状態が含まれていないため、イメージが作成されると、開始されたアプリケーションに関する情報はありません。アプリケーションを起動するには、ENTRYPOINTとして設定する必要があります

関連する問題