首页 > 解决方案 > 使用 DPS 时,为什么 IoT Edge 会在重新启动时重新创建容器?

问题描述

在不使用 DPS 的情况下使用 IoT Edge 时,我可以将状态和日志数据保留在模块中,这些模块在重新启动和服务重新启动后仍然有效。

将 IoT Edge 与 DPS(示例对称密钥)一起使用时,每次重新启动操作系统或重新启动服务时,IoT Edge 都会删除(丢失日志和状态数据)模块并重新创建它们。这使得故障排除和管理模块和业务应用程序成为一项挑战。

重现步骤:

  1. 安装 Windows IoT 1809(虽然我不认为这是特定于操作系统的)
  2. 使用 SAS 令牌(不是 DPS)安装 IoT Edge(https://docs.microsoft.com/en-us/azure/iot-edge/how-to-install-iot-edge-windows
  3. 在 Azure 门户中,添加一个简单的模块(我使用的是:docker.io/ksaye/mqttdemo:0.0.2-windows-amd64,但任何都可以)
  4. 当模块部署到边缘时,运行(进入容器):docker -H npipe:////./pipe/iotedge_moby_engine exec -i -t %yourmodulename% cmd
  5. 在模块容器内,运行:echo hello > test.txt
  6. 在模块容器中,运行:输入 test.txt以查看您的内容
  7. 键入 exit 退出模块容器,然后重新启动系统
  8. 设备启动后,再次运行(进入容器):docker -H npipe:////./pipe/iotedge_moby_engine exec -i -t %yourmodulename% cmd
  9. 再次在模块容器中运行:输入 test.txt以查看您的内容是否已重新启动

(现在看看不受欢迎的行为)

  1. 停止 iotedge 服务运行:net stop iotedge
  2. 更改 c:\programdata\iotedge\config.yaml 以使用具有对称密钥的 DPS
  3. 重新运行第 4 - 9 步,但这次第 9 步将失败,因为该文件不存在

是否有可以改变这种行为的设置或配置对象?部署 SQL Edge 或 MySQL 时,我无法在每次重新启动设备时都删除容器。

标签: azure-iot-edge

解决方案


这是设计使然,步骤 11 被视为“重新配置”事件,所有模块实例都作为流程的一部分被删除。您可以在边缘守护程序中查看此日志。


推荐阅读