Docker容器化Zabbix Server监控同宿主机Agent连接失败问题排查
问题场景
- 宿主机部署基于CentOS 6.0镜像的Docker容器化Zabbix Server,同宿主机运行zabbix-agent2,初始配置Zabbix Server指向IP为127.0.0.1
- 登录Zabbix Web前端查看被监控主机状态时出现多类连接报错,基础排查后多轮尝试修复未生效,需要可行的配置与排障方案
报错详情
配置监控IP为127.0.0.1:10050时
容器内的127.0.0.1指向容器自身环回口,无法访问宿主机服务,报错信息如下:
Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused
配置监控IP为docker0网桥地址172.17.0.1:10050时
考虑到Docker容器无法直接识别宿主机localhost,修改为docker0默认地址后,因agent访问控制规则拦截请求,报错如下:
Get value from agent failed: ZBX_TCP_READ() failed: [104] Connection reset by peer
其他关联报错
宿主机侧对目标地址做ping、traceroute检测均连通正常,但Zabbix内探测主机操作系统时,因容器镜像缺少组件报错:
Cannot execute script. sh: sudo: command not found
已尝试的无效修复操作
- 参考Docker容器访问宿主机localhost的配置教程,使用172.17.0.1作为监控地址
- 尝试在docker-compose.yml中配置
network_mode: host,但该配置与文件内已定义的自定义网络存在冲突 - 参考Docker Compose同时使用host网络与用户自定义网络的配置方案操作,问题仍存在
- 已在docker-compose.yml中正确配置10051:10051端口映射
排障与可行配置方案
修复连接重置(104报错)问题
该报错核心原因是zabbix-agent2默认仅允许127.0.0.1地址发起连接,收到容器网段的请求后会主动重置连接,按以下步骤修改agent配置即可:
- 找到zabbix-agent2配置文件,默认路径为
/etc/zabbix/zabbix_agent2.conf - 修改
Server参数,追加docker0网桥网段,配置为Server=127.0.0.1,172.17.0.0/16,允许Zabbix Server容器所在网段主动拉取监控数据 - 修改
ServerActive参数,同样追加上述网段,保证主动检查请求可被正常接收 - 确认agent监听地址配置为
ListenIP=0.0.0.0,不要仅绑定127.0.0.1,否则跨网段请求无法被接收 - 重启zabbix-agent2服务:
systemctl restart zabbix-agent2,执行ss -tulpn | grep 10050验证端口监听状态,输出中出现0.0.0.0:10050即为配置正确
修复sudo命令不存在报错
该报错是CentOS 6.0基础镜像未预装sudo工具导致,按以下步骤操作即可:
- 进入Zabbix Server容器命令行:
docker exec -it 你的zabbix-server容器名 /bin/bash - 执行yum命令安装sudo:
yum install -y sudo - 安装完成后直接退出容器,无需重启服务,重新在前端触发操作系统探测即可正常执行脚本
网络冲突备选方案(上述配置仍异常时使用)
如果不想调整agent的访问控制规则,可直接通过extra_hosts配置映射宿主机地址,不需要改动现有自定义网络,也不会和network配置产生冲突:
- 在docker-compose.yml的zabbix-server服务配置段下添加以下内容:
extra_hosts: - "host-local:172.17.0.1"
- 执行
docker-compose up -d重载容器配置生效 - 将Zabbix前端中宿主机的监控IP改为
host-local,端口保持10050即可,现有端口映射规则不需要调整
连通性验证
所有配置修改完成后,按以下步骤验证链路可用性:
- 进入Zabbix Server容器:
docker exec -it zabbix-server容器名 /bin/bash - 执行自带工具测试agent连通性:
zabbix_get -s 172.17.0.1 -p 10050 -k agent.ping - 命令返回
1即代表Server到agent的连接完全正常,前端等待1-2分钟刷新后,主机状态就会变为可用
内容的提问来源于stack exchange,提问作者user19413311
相关产品推荐
相关产品推荐

