Docker composeは常に、依存関係の順序で、または指定されていない場合はファイル内の順序でコンテナーを開始および停止します。ただし、docker-composeは、依存関係コンテナーが実行されるまで待機することを保証しません。 参照
できます 詳細については、こちらをご覧ください。したがって、ここでの問題は、spring-mysql
のときにデータベースの準備ができていないことです。 コンテナはデータベースにアクセスしようとします。したがって、推奨される解決策は、を使用することです。 wait-for-it.sh
またはspring-mysql
をラップする同様のスクリプト ENTRYPOINT
を開始するアプリ 。
例として、wait-for-it.sh
を使用する場合 ENTRYPOINT
上記のスクリプトをプロジェクトルートにコピーした後、Dockerfileの次のように変更する必要があります:
ENTRYPOINT ["./wait-for-it.sh", "db:3306", "--", "java", "-jar", "app.jar"]
そして、ここで考慮すべき他の2つの重要なことは次のとおりです。
- 非推奨 のリンクは使用しないでください 代わりに、ユーザー定義のネットワークを使用する必要があります。ネットワークを明示的に定義しない場合、docker-composeファイル内のすべてのサービスは単一のユーザー定義ネットワークになります。したがって、作成ファイルからリンクを削除するだけです。
- ユーザー定義のネットワーク内でのみ使用する場合は、Dockerコンテナのポートを公開する必要はありません。