私のプロジェクトでは、Django で postgresql を使用しています。これらは異なるコンテナーに入っているのですが、問題は、Django を実行する前に postgres を待つ必要があることです。現時点では、Django コンテナーのファイルでこれを行っていますsleep 5
。command.sh
また、netcat でも同じことができることがわかりましたが、追加パッケージを使用しない方法の方が望ましいです。curl
ただし、wget
postgres プロトコルをサポートしていないため、これを行うことはできません。これを行う方法はありますか?
ベストアンサー1
私はこの問題を何時間もかけて調査し、解決策を見つけました。Docker は、depends_on
別のサービスを実行するためにサービスの起動を検討します。起動するとすぐにdb
、service-app が ur に接続しようとしますdb
が、接続を受信する準備ができていないため、この問題が発生します。そのため、接続を待つために、app サービスのヘルス ステータスを確認できますdb
。これが私の解決策です。これで私の問題は解決しました。:) 重要: 私は docker-compose バージョン 2.1 を使用しています。
version: '2.1'
services:
my-app:
build: .
command: su -c "python manage.py runserver 0.0.0.0:8000"
ports:
- "8000:8000"
depends_on:
db:
condition: service_healthy
links:
- db
volumes:
- .:/app_directory
db:
image: postgres:10.5
ports:
- "5432:5432"
volumes:
- database:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
volumes:
database:
この場合、.sh ファイルを作成する必要はありません。