Ubuntu虚拟机中OPC Publisher作为IoT Edge模块无法启动排查求助
问题描述
OPC Publisher市场镜像作为独立容器可成功运行(尽管存在服务器连接问题),但无法将其作为Edge模块部署,尤其是在修改容器创建选项后部署失败。
背景:在主机笔记本上始终无法启动该模块,因此创建了一台Ubuntu虚拟机。使用默认容器创建选项在虚拟机中部署Edge模块时,该模块确实在iotedge模块列表中显示为“running”状态。需要设置“--op”参数来调整发布速率,因此通过门户的“设置模块”标签页修改了创建选项。由于没有更新按钮,点击了创建按钮来“重建”模块,此后该模块就不再显示了。
后续OPC Publisher模块就没有再出现在Edge虚拟机中,操作全程遵循官方教程。
使用的命令如下:
sudo docker run -v /iiotedge:/appdata mcr.microsoft.com/iotedge/opc-publisher:latest --aa --pf=/appdata/publishednodes.json --c="HostName=<iot hub name>.azure-devices.net;DeviceId=iothubowner;SharedAccessKey=<hub primary key>" --dc="HostName=<edge device id/name>.azure-devices.net;DeviceId=<edge device id/name>;SharedAccessKey=<edge primary key>" --op=10000
容器创建选项如下:
{ "Hostname": "opcpublisher", "Cmd": [ "--pf=/appdata/publishednodes.json", "--aa", "--op=10000" ], "HostConfig": { "Binds": [ "/iiotedge:/appdata" ] } }
没有显式指定连接字符串,因为官方文档说明运行时会自动传递该参数。
相关的iotedge journalctl日志如下:
Oct 06 19:36:05 shreesha-VirtualBox iotedged[9622]: 2021-10-06T14:06:05Z [INFO] - Pulling image mcr.microsoft.com/iotedge/opc-publisher:latest... Oct 06 19:36:08 shreesha-VirtualBox iotedged[9622]: 2021-10-06T14:06:08Z [INFO] - Successfully pulled image mcr.microsoft.com/iotedge/opc-publisher:latest Oct 06 19:36:08 shreesha-VirtualBox iotedged[9622]: 2021-10-06T14:06:08Z [INFO] - Creating module OPCPublisher... Oct 06 19:36:08 shreesha-VirtualBox iotedged[9622]: 2021-10-06T14:06:08Z [INFO] - Starting new listener for module OPCPublisher Oct 06 19:36:08 shreesha-VirtualBox iotedged[9622]: 2021-10-06T14:06:08Z [ERR!] - Internal server error: Could not create module OPCPublisher Oct 06 19:36:08 shreesha-VirtualBox iotedged[9622]: caused by: Could not get module OPCPublisher
iotedge自身的日志如下:
~$ iotedge logs OPCPublisher A module runtime error occurred
已执行docker container prune命令排查,未解决问题。
额外异常现象:在Azure门户的故障排查页面试图重启该模块时,会抛出错误“module not found in the current environment”
排查与解决步骤
- 首先检查部署清单的模块名称大小写一致性:IoT Edge对模块名大小写敏感,容器创建选项中设置的Hostname为
opcpublisher(全小写),但日志中显示的模块名为OPCPublisher(驼峰命名),两者不匹配会导致iotedged无法识别已创建的模块实例,直接触发创建失败。修改容器创建选项中的Hostname为OPCPublisher,和门户中定义的模块名保持完全一致。 - 检查挂载目录权限:宿主机的
/iiotedge目录需要给iotedge运行时、容器内1000用户开放读写权限,执行以下命令修改权限:sudo chmod 777 /iiotedge -R sudo chown 1000:1000 /iiotedge -R - 清除Edge本地部署缓存:执行以下命令重置IoT Edge运行时的本地部署状态,避免旧的失效模块配置残留:
sudo systemctl stop iotedge sudo rm -rf /var/lib/iotedge/* sudo docker rm -f $(sudo docker ps -a | grep edge | awk '{print $1}') sudo systemctl start iotedge - 重新在Azure门户部署模块:确认模块名、容器创建选项的Hostname完全一致后重新提交部署,等待1-2分钟后执行
sudo iotedge list查看模块运行状态。 - 如果仍然部署失败,可临时在容器创建选项的Cmd数组中显式添加连接字符串参数,绕过运行时自动注入的潜在故障,验证模块是否能正常启动。
内容的提问来源于stack exchange,提问作者kingvittu
相关产品推荐
相关产品推荐

