この回答はdocker-compose バージョン2用で、バージョン3でも機能します
depends_onを使用しても、データにアクセスできます。
docker docs Docker ComposeとDjangoを見ると、次のようにデータベースにアクセスできます。
version: '2'
services:
db:
image: postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
リンクとdepends_onの違いは何ですか?
リンク:
たとえば、データベースのコンテナを作成すると、次のようになります。
docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql
docker inspect d54cf8a0fb98 |grep HostPort
そして、あなたは見つけるかもしれません
"HostPort": "32777"
つまり、ローカルホストのポート32777(コンテナでは3306)からデータベースに接続できますが、このポートはコンテナを再起動または削除するたびに変更されます。したがって、リンクを使用して、常にデータベースに接続し、どのポートであるかを知る必要がないことを確認できます。
web:
links:
- db
depends_on:
Giorgio Ferraris Docker-compose.ymlからの素晴らしいブログを見つけました:V1からV2へ
docker-composeがV2ファイルを実行すると、ファイルで定義されたすべてのコンテナー間のネットワークが自動的に構築され、すべてのコンテナーは、docker-compose.ymlファイルで定義された名前を使用するだけで他のコンテナーをすぐに参照できます。
そして
そのため、リンクはもう必要ありません。リンクは、dbコンテナーとwebサーバーコンテナー間のネットワーク通信を開始するために使用されましたが、これは既にdocker-composeによって行われています
更新
サービス間の依存関係を表します。これには2つの影響があります。
docker-compose up
依存関係順にサービスを開始します。次の例では、dbとredisがwebの前に開始されます。
docker-compose up SERVICE
SERVICEの依存関係が自動的に含まれます。次の例では、docker-compose up webもdbとredisを作成して起動します。
簡単な例:
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
注:depends_onは、Webを開始する前に、dbおよびredisが「準備完了」になるのを待たず、それらが開始されるまで待機します。サービスの準備が整うまで待つ必要がある場合は、この問題の詳細と解決のための戦略について、起動順序の制御を参照してください。
--link
フラグは、今ドッカーの廃止予定のレガシー機能であり、ドキュメントは「それは最終的に除去することができる」示唆ドッカー:レガシーコンテナへのリンクを。Dockerネットワーク機能またはdocker composeメソッドは使用しないことをお勧めします。これは、この機能について学ぶここの誰にとっても役立つと考えました。