天天看点

以Docker容器部署Zabbix监控踩坑篇

目前我需要一个zabbix的测试环境,这次我打算让zabbix建立在容器上。首先你的系统上得有docker,这个不解释了。

参考文档:https://www.zabbix.com/documentation/4.0/zh/manual/installation/containers

容器版的zabbix需要以下几个容器组件:mysql zabbix-java-gateway zabbix-server-mysql zabbix-nginx

数据库当然可以有很多种选择,不过官方的教程里使用的是mysql。

部署也有几种方法,其中一种是一个容器里包含了所有的组件,只要运行一个容器就可以了。还有一种是组件统统为独立的容器,然后将它们用--link命令将它们联系起来。我是用的第二种。

命令只有四条,分别启动四个容器。如果电脑中没有这四个容器会自动下载它们。

其中mysql_password和mysql_root_password是可以根据需要变动的,不过所有的容器密码都得保持一致,否则页面不能被打开。

四个命令打完,zabbix就可以访问了。默认账户和密码是admin和zabbix。

由于不太熟悉docker所以犯了小错误。以下记录一下

首先,网页访问不了先检查password是否填的一样,除了zabbix-java-gateway之外,其他都需要同样的密码。

再次检查防火墙和selinux,将它们关闭或者放行(测试环境中关闭。)

错误:

docker: error response from daemon: conflict. the container name "/zabbix-server-mysql" is already in use by container "9fc185bad94200043400345dfc9e8b2c41e198bae4e0c911744c3e1b47e64503". you have to remove (or rename) that container to be able to reuse that name.

第一次运行上面的命令之后,即使关闭了容器,如果要再次运行命令,也需要将之前的容器删除,才能建立名字和之前相同的容器。

其中contianer.name从docker ps -a命令中获取,一定要-a参数,否则停止的容器是不显示的。

docker: error response from daemon: driver failed programming external connectivity on endpoint zabbix-server-mysql (3149119198cc0398bf7df82e406938a97dd63afdcda6ec8d0467487e14b3046f): (iptables failed: iptables --wait -t nat -a docker -p tcp -d 0/0 --dport 10051 -j dnat --to-destination 172.17.0.4:10051 ! -i docker0: iptables: no chain/target/match by that name.

产生的原因是运行这条命令之前已经运行了映射目标端口的命令,网上说解决方法是重启docker服务?虽然有效,但是我觉得太不靠谱了,如果有容器运行着,也重启吗?

就目前而言,zabbix已经运行了。zabbix-agent我不打算运行在容器里。作为快速生成的测试环境我觉得够了,不过我觉得官网的代码只不过是一种演示,mysql容器要是关掉了,或者挂掉了,那不是所有的数据都没了?