最近部署docker版本zabbix遇到了前所未有的大坑,网上还找不到任何有用的信息,研究了2天,终于都解决了,记录分析一下。

# 1.问题:在部署了docker版zabbix无法连接到容器内mysql。

现象:启动docker版zabbix服务端日志一直提示无法连接到mysql。

原因:zabbix需要用root登录mysql。 解决:首先进入mysql的docker容器:

docker exec -it -uroot 8cecb07610c6 /bin/bash

登录mysql:

mysql -uroot -p

授予root用户远程登录权限:

use mysql;
update set user set host='%' where user = 'root';
flush privileges;

重新启动zabbix容器。

# 2.问题:在部署了docker版zabbix的宿主机上无法运行zabbix agent。

现象:启动zabbix agent提示成功,但是很快会被关闭,10050端口不监听。

原因:原因是libcurl.so.4版本被改变。

解决:部署前备份该文件,或在其他同版本服务器备份一个,将该文件恢复到如下路径:

cp libcurl.so.4 /lib/aarch64-linux-gnu/libcurl.so.4

# 3.问题:docker版zabbix服务端无法访问宿主机zabbix agent。

现象:在容器里telnet宿主机docker0段ip和宿主机自身ip 10050均提示连接被重置,宿主机可以正常telnet,zabbix agent无法上线。

原因:配置文件中服务端ip设置需要修改。

解决:宿主机zabbix_agent配置文件中的Server与ServerActive需要设置为docker0网段对应的服务端ip。 进入zabbix/zabbix-server-mysql:latest容器:

docker exec -it -u root  6d0283b610c6 /bin/sh

获取容器ip地址:

ifconfig

我获取到的ip为172.17.0.4. 修改宿主机zabbix agent配置文件:

vi /etc/zabbix/zabbix_agent2.conf

将Server与ServerActive后面的值都修改为172.17.0.4。

/etc/init.d/zabbix-agent2 restart

# 4.问题:zabbix服务端无法跨网段访问zabbix agent。

现象:在容器里telnet客户端ip 10050提示连接被重置,宿主机可以正常telnet,zabbix agent无法上线。

原因:配置文件中服务端ip设置需要修改。

解决:客户端zabbix_agent配置文件中的Server与ServerActive需要设置为服务端ip到达客户端的上层网络地址。 在无法连接宿主机的情况下启动客户端zabbix agent,然后查看日志:

cd /var/log/zabbix
vi zabbix_agent2.log

获取到类似如下报错:

cannot accept incoming connection for peer: 10.0.10.1

将Server与ServerActive后面的值都修改为10.0.10.1。

/etc/init.d/zabbix-agent2 restart