有没有一种方法可以强制执行模块间的依赖关系/初始化顺序?

时间:2019-05-08 17:29:01

标签: docker azure-iot-edge docker-engine

使用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容器中,我一直在执行以下操作,以确保postgresweb执行{{ 1}}相关动作:

postgres

当然,这是一个人为设计的示例,具有明显的缺陷,但它说明了解决方法的要旨。

2 个答案:

答案 0 :(得分:0)

否,IotEdge不支持按特定顺序初始化模块。 请注意,即使可以按特定顺序启动它们来解决依赖关系,但如果其中一个模块崩溃,您仍然会遇到问题。 EdgeHub将重新启动它,但是您将失去初始化顺序。

Mike Yagley(致力于IotEdge的撰稿人之一)在github上对此问题做了解释。

答案 1 :(得分:0)

StartupOrder:在IoT Edge版本1.0.10中引入。首次部署时,IoT Edge代理应按哪个顺序启动模块。