たとえば、DockerコンテナA、B、Cがそれぞれ異なるランタイムを持つ場合、それらを連続して実行する必要があります。Dockerコンテナを連続して実行するためのミドルウェアはありますか?
A -> (wait A done) -> B -> (wait B done) -> C
これを実現するためのミドルウェアはありますか?またはdocker-compose
程度でこれを行うことはできますか?
たとえば、DockerコンテナA、B、Cがそれぞれ異なるランタイムを持つ場合、それらを連続して実行する必要があります。Dockerコンテナを連続して実行するためのミドルウェアはありますか?
A -> (wait A done) -> B -> (wait B done) -> C
これを実現するためのミドルウェアはありますか?またはdocker-compose
程度でこれを行うことはできますか?
「ドッカーのやり方」をすることは、ドッカー/ドッカーの作文には何も組み込まれていないため、すべてを自分の独立したマイクロサービスとして扱うべきです。 Composeは常に依存関係を順番に開始しますが、開始が完了するのを待たずに、Webサーバーを起動する前にデータベースサーバーが起動するのを待つようなことはできません。
ここで利用できる、このトピックに関する豊富な情報をあります:依存関係のコンテナが
wait-for-itはあなたを可能にするネットワークサービスである場合
:私は、以下の簡単な要約を提供してきましたhttps://docs.docker.com/compose/startup-order/
コマンドを実行する前にポートがアクセス可能になるまで待つ(例:https://docs.docker.com/compose/startup-order/)
version: "2"
services:
web:
build: .
ports:
- "80:8000"
depends_on:
- "db"
command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
db:
image: postgres
それは「完成」のネットワークサービスまたはない場合は、条件はまた、あなたがサービスは、現在のコンテナサービスを開始する前に利用可能である確認ラッパースクリプトを実装する必要がありますちょうど
accessbileているポートよりも複雑です(https://docs.docker.com/compose/startup-order/から取得)
#!/bin/bash
# wait-for-postgres.sh
set -e
host="$1"
shift
cmd="[email protected]"
until psql -h "$host" -U "postgres" -c '\l'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
exec $cmd