Azure IoT Edge升级1.2后edge Hub无法启动 提示8883端口被分配但无进程占用
Azure IoT Edge 1.2版本升级edgeHub启动失败故障处理
故障描述
升级Azure IoT Edge到1.2版本后,edgeHub模块无法启动,抛出端口占用错误,实际主机层面检测8883端口无进程占用,且卸载重装iotedge、moby组件故障依旧。
报错信息
---> Microsoft.Azure.Devices.Edge.Agent.Edgelet.EdgeletCommunicationException- Message:Error calling start module edgeHub: Could not start module edgeHub caused by: Could not start module edgeHub caused by: driver failed programming external connectivity on endpoint edgeHub (8eebbec9c348b1edfbf351779caf1708b2bfea1ebdd26824695649aa42d20f63): Bind for 0.0.0.0:8883 failed: port is already allocated, StatusCode:500, at: at [...].
端口检测结果(执行sudo netstat -peanut)
:~ $ sudo netstat -peanut Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 14269 549/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 0 15028 449/cupsd tcp 0 0 192.168.1.10:22 192.168.1.5:53532 ESTABLISHED 0 20255 985/sshd: pi [priv] tcp 0 0 192.168.1.10:47938 20.50.65.133:443 ESTABLISHED 0 19292 521/dotnet tcp6 0 0 :::5671 :::* LISTEN 0 20728 962/docker-proxy tcp6 0 0 :::22 :::* LISTEN 0 14271 549/sshd tcp6 0 0 ::1:3350 :::* LISTEN 0 18647 551/xrdp-sesman tcp6 0 0 ::1:631 :::* LISTEN 0 15027 449/cupsd tcp6 0 0 :::443 :::* LISTEN 0 20779 976/docker-proxy tcp6 0 0 :::3389 :::* LISTEN 115 17031 573/xrdp udp 0 0 0.0.0.0:40863 0.0.0.0:* 108 15018 405/avahi-daemon: r udp 0 0 0.0.0.0:68 0.0.0.0:* 0 18975 487/dhcpcd udp 0 0 0.0.0.0:631 0.0.0.0:* 0 17860 520/cups-browsed udp 0 0 0.0.0.0:5353 0.0.0.0:* 108 15016 405/avahi-daemon: r udp6 0 0 :::5353 :::* 108 15017 405/avahi-daemon: r udp6 0 0 :::44826 :::* 108 15019 405/avahi-daemon: r
根因说明
该故障不是主机操作系统层面的端口占用,而是Docker/Moby运行时的网络状态缓存出现残留:旧版本edgeHub容器的8883端口绑定记录没有被正确清理,导致新部署的edgeHub容器申请端口时被运行时判定为已占用。netstat命令只能检测主机操作系统层面的端口监听,无法识别Docker运行时内部的残留绑定记录。
修复步骤
- 停止所有正在运行的容器:
sudo docker stop $(sudo docker ps -aq) - 停止Docker/Moby服务:
sudo systemctl stop docker(若使用moby runtime,替换为sudo systemctl stop moby-engine) - 删除Docker网络状态缓存文件:
sudo rm -rf /var/lib/docker/network/files/local-kv.db - 重启Docker/Moby服务:
sudo systemctl start docker(对应moby则为sudo systemctl start moby-engine) - 重新安装部署Azure IoT Edge 1.2版本及相关模块即可正常启动edgeHub
- 验证:部署完成后执行
sudo docker ps确认edgeHub状态为Up,执行sudo netstat -peanut | grep 8883可查看到端口被docker-proxy正常监听。
内容的提问来源于stack exchange,提问作者Qusp
相关产品推荐
相关产品推荐

