天天看點

以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容器要是關掉了,或者挂掉了,那不是所有的資料都沒了?