ここで説明することはたくさんありますが、同様の問題について以前の回答の1つをリンクします。データベースサービスとバックグラウンドのみが異なるため、手順は実際には同じです。
1) まず、サービスがhttp経由で応答するまで待機するbashスクリプトを提供する必要があります。データベースでは、通常、DBの準備が整い、すべての初期化が完了したときに発生します。
vishnubobによって作成されたwait-for-it.shスクリプト 彼のwait-for-it repo@github。
2) 次に、DBを必要とする各コンテナ内にそのスクリプトを取得する必要があります。
3) 3番目に、entrypoint
を指定します 作成ファイルでは、実際のcommand
の前に待機中のスクリプトが実行されます サービスを実行するとトリガーされます。
エントリポイントの例(私がリンクしている回答への参照として)
docker-entrypoint.sh:
#!/bin/bash
set -e
sh -c './wait-for-it.sh oracle:3306 -t 30'
exec "[email protected]"
これらのすべてのステップは、シナリオ2で詳細に説明されています。ここで指している回答の中に、別の回答への参照があることに注意してください。この問題は初心者にとって非常に一般的な問題であり、かなり多くの説明が必要なため、ここにすべてを投稿することはできません。
注 ここでdepends_on
について これはdockerからのこの問題のネイティブソリューションだと思うかもしれません-docsが述べているように、コンテナーが実行されるまで待機するだけで、実際には内部ジョブが終了しません-dockerは実行する必要がある量を認識していません。