2016-10-18 9 views
3

私はapacheのドッキング・コンテナを使用しています。 コンテナの起動後にスクリプトを実行する必要があります。 どうすればいいですか?コンテナが実行された後にスクリプトを実行する方法

まず第一に、私が持っているdockerfile:exec apache2 -D FOREGROUND、これは動作します:run.sh

FROM:ubunty:trusty 
... necessary installs 

ADD test.sh /my-folder/  

EXPOSE 80 
EXPOSE 443 

CMD ["/run.sh"] 

を私は最後のコマンドとして実行しています。 今度は、コンテナの起動後に追加のスクリプトtest.shを実行します。

具体的には、Apacheのコンテナを起動した後(これは動作します)、実行する追加のスクリプトです。そのスクリプトは自分のサーバーのポート80に接続する必要があります(ポートは実行コマンドでマップされています)。

CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS          NAMES 
61c66c17d5f1  my-apache   "/run.sh"   28 minutes ago  Up 28 minutes  0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp suspicious_shockley 
+0

代わりに別のコンテナでスクリプトを実行できますか?それは同じコンテナ内で実行する必要がありますか? – larsks

答えて

0

手動たい場合は、スクリプトの使用を実行します。

docker exec 61c66c17d5f1 /myfolder/test.sh 

あなたはapacheの開始があなたのrun.shを変更した後、スクリプトを自動的に実行する場合:

exec apache2 & 
sleep 2 
/myfolder/test.sh 
wait 

よろしく

+0

私はそれを自動で使いたいです。しかし、それは言葉ではありません。 execコマンドの後のすべてが実行されていないようです。 – DenCowboy

+0

を試してみてください&回答を更新しました –

0

これを実装する別の方法は、アプリケーション用に別のコンテナを作成することです。それはあなたの信頼できるイメージを継承しますが、その中には何もありません。それはすべてのものを実行し、ゼロコードで終了します。この場合、あなたはあなたのapacheサービスに触れません。このコンテナを次のようにデータボリュームにマップする必要があります。

app: 
    build: ./app/ 
    depends_on: 
     - apache 
    volumes: 
     - /path/to/app:/var/www/html 

Apacheが起動した後にスクリプトを実行させたいと言ったように、フィールドdepends_onを追加するだけで、docker_composeにapacheサービスの後に起動するよう指示することができます。しかし、これを行うには、ドッカー表記V2を使用する必要があります。

ところであなたの場合は、あなたのスクリプトから接続するためのapacheサービスを開始する必要があります。 depends_onlinksと置き換える必要があります。これは、アプリケーションコンテナホストファイルにapache IPを追加するため、apacheホスト名でpingすることができます。

関連する問題