2016-03-21 42 views
4

Webアプリケーションがインストールされた単純なドッカーコンテナを実行しようとしています(ドッカーファイルを使用していません)。 テスト中、私は常に-t -iオプションを使ってコンテナを実行し、シェルスクリプトを実行してTomcatサービスを起動します。 どのように私が本番環境に移行したら、-t -iオプションを使用したくなくて、Tomcatサービスを開始して唯一のプライマリサービスにする必要があります。Dockerコンテナでサービスを実行する方法

Tomcatを起動するための起動スクリプトのエントリポイントを指定しようとしましたが、そのスクリプトの終了後にコンテナが終了します。 コンテナを実行し、サービスを開始し、そのサービスをコンテナの単一のプライマリサービスとして保持するにはどうすればよいですか?

注:スーパーバイザーについての記事を読んでいますが、そのルートに行くと画像を最初から作成する必要があるかどうかはわかりません。私はそれをしないことを好むだろう。

提案がありますか?

+1

"-d"フラグを使用 – lamirap

答えて

8

あなたはエントリポイントのパターンを使用していますDockerfileを持っている場合、それは次のようになります何らかの方法で。一部の人はsyslogを尾を引くのが好きですが、存在するファイルを見つけても機能します。

(start.sh)

#!/bin/bash 

service Your_Service_Or_Whatever start 
tail -f /var/log/dmesg 
1

デフォルトでは、Dockerコンテナは画像Dockerfileの設定に従って実行されます。 -iフラグを持つコンテナを通常実行する場合は、STDINを開いたままにしてコンテナのエントリポイントにアクセスできるようにするか、bashシェルにすることができます。必要な機能を実現するには、コマンドをドッカーに直接渡して分離状態でコンテナを実行します。

docker run -d myapp /opt/catalina/bin/startup.sh 

これは、myappコンテナをデタッチ状態で実行し、3番目の引数として渡されたコマンドを実行します。このコマンドの結果、長寿命のサービスになると、サービスが有効である限り、コンテナはアクティブのままです。

This is explained in detail in the docs

FROM ubuntu 

...Some configuration steps... 

add start.sh /start.sh 

ENTRYPOINT ["/start.sh"] 

はあなたが作るするだけです必ずごstart.shスクリプトが「ハング」

(Dockerfile):

+0

デタッチされたモーションでコンテナを実行するdeは私の場合は助けにならない。 は私が必要なサービスが開始とすぐ シェルスクリプトが終了すると、コンテナは終了...私はサービスを使用して、コンテナの稼働を維持する必要があり がthatIプライマリサービス –

+0

として開始取得するシェルスクリプトを実行する必要がありますデタッチ状態でコンテナを実行する必要があります。サービスをアクティブに保つために、フォアグラウンドでサービスを実行する必要があります。メモリから '$ PATH_TO_TOMCAT/startup 'のようなものが必要になります。sh run' –

+0

サービスを開始してコンテナが存在することを試してみましたが、実際に開始されるサービスではなく、プライマリサービスとしてサービスを開始するために使用するシェルを扱うということです。 –

2

短いバージョン:ドッカーバージョン1.12.1でテスト

FROM ubuntu 

...Some configuration steps... 

ENTRYPOINT ["/bin/sh", "-c", "while true; do sleep 1; done"] 

、お使いのバージョン

を見つけるために23cf638

使用docker --versionを構築

関連する問題