前言
在上一讲中我们提到使用docker run命令来依次创建容器,这种方式很简便但不够快捷也无法批量管理容器的变更。所以也算是为了做一个练手的实验吧,这次尝试自己写了一个docker-compose.yml,为以后的k8s集群阶段打基础。

在写的过程中也遇到了几个坑,虽然都是很小的语法问题,但是因为没有明显的报错,自己一个一个排查问题也花了不少时间。


第一个问题就是我发现每个version之间对语法的要求不一样,由于我没有看过官方手册所以预先不清楚这一点,3.3是可以使用tab进行缩进的,但是3.9则要求行开头使用空格缩进。

第二个问题就是所有容器启动完成之后发现zabbix的server容器和web容器连接不上数据库,我首先的排查思路是看看docker网络是否有问题,使用docker network inspect查看后发现ip是正常分配的,容器内也可以ping通数据库。

遂使用bing搜索后得知可能是mysql版本问题,但是这个版本是经过之前用run创建试验过的,是肯定支持8.0的。

然后我尝试进入mysql容器看看是不是表没有创建正确,使用mysql -u root -p登录却发现密码怎么都不对,这里我们就可以窥见一二了,问题应该是出在密码上。

最后发现问题原来在这…

这一段环境变量参数是不能加引号的,而之前我们使用run命令时是加了引号的,又因为up的时候并没有任何报错,所以导致我第一时间没有注意到是这里有问题。

微信截图_20220413165419

此处还有一个注意的点就是web页面出现系统信息web connection问题,这个问题是由于web容器没有连接到server容器而产生。web的配置文件是直接使用getenv获取环境变量中的HOST和PORT所以我们需要在创建web容器时加上这两个环境变量:

- ZBX_SERVER_HOST=zabbix-server-mysql

- ZBX_SERVER_PORT=10051

tips:此处是提供一个思路,如果不是使用compose安装的也可以通过此思路解决。

version: "3.9"
services:
  mysql-server:
   image: mysql:8.0
   command: 
    --character-set-server=utf8
    --collation-server=utf8_bin
    --default-authentication-plugin=mysql_native_password
   hostname: mysql-server
   environment:
    - MYSQL_DATABASE=zabbix
    - MYSQL_USER=zabbix
    - MYSQL_PASSWORD=zabbix123
    - MYSQL_ROOT_PASSWORD=zabbix123
   volumes:
    - mysql-data:/var/lib/mysql
   restart: unless-stopped


  zabbix-java-gateway:
   image: zabbix/zabbix-java-gateway:latest
   ports: 
    - 10052:10052
   restart: unless-stopped


  zabbix-server-mysql:
   image: zabbix/zabbix-server-mysql:latest
   environment:
    - DB_SERVER_HOST=mysql-server
    - MYSQL_DATABASE=zabbix
    - MYSQL_USER=zabbix
    - MYSQL_PASSWORD=zabbix123
    - MYSQL_ROOT_PASSWORD=zabbix123
    - ZBX_JAVAGATEWAY=zabbix-java-gateway
   ports:
    - 10051:10051
   depends_on: 
    - mysql-server
   restart: unless-stopped


  zabbix-web-nginx-mysql:
   image: zabbix/zabbix-web-nginx-mysql:latest
   environment: 
    - ZBX_SERVER_HOST=zabbix-server-mysql
    - ZBX_SERVER_PORT=10051
    - DB_SERVER_HOST=mysql-server
    - MYSQL_DATABASE=zabbix
    - MYSQL_USER=zabbix
    - MYSQL_PASSWORD=zabbix123
    - MYSQL_ROOT_PASSWORD=zabbix123
   ports:
    - 8080:8080
   depends_on: 
    - mysql-server
   restart: unless-stopped

volumes:
  mysql-data: {}