Azure IoT Edge を使用して、デプロイ内のコンテナー/モジュールの初期化順序を保証する方法を見つけられませんでした。たとえば、A と B の 2 つのモジュールがあるとします。A はサーバーで、B は A に依存するクライアントです。私の知る限り、A が B より先に起動することを保証する方法はありません。
Azure IoT Edge デプロイ テンプレートは Docker Engine API に準拠していますが、その API を通じて依存関係を適用する方法が見つかりませんでした。回避策として、各コンテナーのコードで実行されているコンテナーについては想定していません。これは機能しますが、追加のコードのオーバーヘッドは理想的ではありません。特に、docker-compose のようなツールを使用すると、初期化順序の強制がかなり簡単になることを考慮してください。
このようなことをしたい (src: https://docs.docker.com/compose/compose-file/ ):
version: "3.7"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
回避策として、上記の例に従って、web
コンテナで次のようなことを行って、依存アクションを実行postgres
する前に稼働していることを確認しました。web
postgres
postgresIsUp = False
while not postgresIsUp:
try:
pingPostgres()
postgresIsUp = True
except PingError:
print("postgres is not yet running")
もちろん、これは明らかな欠陥のある不自然な例ですが、回避策の要点を示しています。