使用Azure IoT Edge,我还没有找到任何方法来保证部署中容器/模块的初始化顺序。举例来说,假设我有 2 个模块,A 和 B。A 是服务器,B 是依赖于 A 的客户端。据我所知,无法保证 A 在 B 之前启动。
Azure IoT Edge 部署模板符合 Docker 引擎 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")
当然,这是一个带有明显缺陷的人为示例,但它展示了解决方法的要点。
不,IotEdge 不支持按特定顺序初始化模块。
请注意,即使可以按特定顺序启动它们来解决依赖关系,如果其中一个模块崩溃,您仍然会遇到问题。它会被 EdgeHub 重新启动,但你会失去初始化的顺序。
Mike Yagley(IotEdge 的贡献者之一)对此问题给出了解释github.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)