使用Azure IoT Edge,我没有找到任何方法来保证部署中容器/模块的初始化顺序。例如,假设我有两个模块,A和B。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
执行{{ 1}}相关动作:
postgres
当然,这是一个人为设计的示例,具有明显的缺陷,但它说明了解决方法的要旨。
答案 0 :(得分:0)
否,IotEdge不支持按特定顺序初始化模块。 请注意,即使可以按特定顺序启动它们来解决依赖关系,但如果其中一个模块崩溃,您仍然会遇到问题。 EdgeHub将重新启动它,但是您将失去初始化顺序。
Mike Yagley(致力于IotEdge的撰稿人之一)在github上对此问题做了解释。
答案 1 :(得分:0)
StartupOrder:在IoT Edge版本1.0.10中引入。首次部署时,IoT Edge代理应按哪个顺序启动模块。