You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Zabbix遇MySQL连接失败问题求助

解决Zabbix服务无法连接MySQL容器的问题

问题现象

执行sudo docker-compose up后,MySQL容器正常启动,但zabbix-server和zabbix-web-nginx-mysql持续报错:

MySQL server is not available. Waiting 5 seconds...

核心错误点及修复方案

1. 容器间网络访问逻辑错误

Docker Compose默认创建独立的内部网络,容器不能用127.0.0.1访问其他容器,必须使用服务名称(即yaml中定义的mysql)作为主机名。你注释掉了DB_SERVER_HOST,导致Zabbix默认尝试连接容器自身的127.0.0.1,自然找不到MySQL服务。

2. TLS配置不匹配

zabbix-server设置了ZBX_DBTLSCONNECT: 'required',但MySQL容器默认未启用TLS加密,导致连接握手失败。要么禁用TLS,要么给MySQL配置对应证书。

3. 服务就绪检测缺失

depends_on仅保证容器启动顺序,不确保MySQL服务完全就绪。需要给MySQL添加健康检查,让Zabbix服务等MySQL真正可用后再启动。

4. 环境变量拼写错误

zabbix-web中的BX_DB_ENCRYPTION是笔误,正确变量名为ZBX_DB_ENCRYPTION。

5. Zabbix Agent连接目标错误

Agent容器内的ZBX_SERVER_HOST: '127.0.0.1'指向的是Agent自身容器,应改为zabbix-server的服务名zabbix-server。


修改后的完整docker-compose.yml

version: '3'
services:
  mysql:
    container_name: 'MySQL'
    image: 'mysql'
    environment:
      MYSQL_DATABASE: 'zabbix_db'
      MYSQL_USER: 'zabbix_user'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
      MYSQL_PASSWORD: 'zabbix_password'
    volumes:
      - './mysql:/var/lib/mysql'
    ports:
      - '3306:3306'
    restart: 'on-failure'
    # 添加健康检查,确保MySQL服务就绪
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "zabbix_user", "-pzabbix_password"]
      interval: 5s
      timeout: 5s
      retries: 5

  zabbix-server:
    container_name: 'Zabbix-server'
    image: 'zabbix/zabbix-server-mysql'
    environment:
      # 暂时禁用TLS,若需启用需同步配置MySQL证书
      # ZBX_DBTLSCONNECT: 'required'
      DB_SERVER_HOST: 'mysql'  # 使用MySQL服务名访问
      DB_SERVER_PORT: '3306'
      MYSQL_USER: 'zabbix_user'
      MYSQL_PASSWORD: 'zabbix_password'
      MYSQL_DATABASE: 'zabbix_db'
    ports:
      - '10051:10051'
    depends_on:
      mysql:
        condition: service_healthy  # 等待MySQL健康检查通过

  zabbix-web-nginx-mysql:
    container_name: 'zabbix-web-nginx-mysql'
    image: 'zabbix/zabbix-web-nginx-mysql'
    environment:
      ZBX_DB_ENCRYPTION: 'false'  # 修正变量名,同步禁用加密
      ZBX_SERVER_HOST: 'zabbix-server'  # 使用Zabbix Server服务名
      ZBX_SERVER_PORT: '10051'
      DB_SERVER_HOST: 'mysql'  # 使用MySQL服务名访问
      DB_SERVER_PORT: '3306'
      MYSQL_DATABASE: 'zabbix_db'
      MYSQL_USER: 'zabbix_user'
      MYSQL_PASSWORD: 'zabbix_password'
      PHP_TZ: 'Asia/Tehran'
    depends_on:
      mysql:
        condition: service_healthy
      zabbix-server:
        condition: service_started
    ports:
      - '8080:8080'

  zabbix-agent:
    container_name: 'Zabbix-agent'
    image: 'zabbix/zabbix-agent'
    environment:
      ZBX_HOSTNAME: 'srv197189'
      ZBX_SERVER_HOST: 'zabbix-server'  # 使用Zabbix Server服务名
      ZBX_ACTIVESERVERS: 'zabbix-server:10051'

额外说明

  • 若需启用MySQL TLS加密,需给MySQL容器挂载证书文件并配置对应环境变量,同时Zabbix服务也要配置ZBX_DBTSLCERTFILE等TLS参数。
  • 若要让Zabbix容器连接宿主机的MySQL,需使用宿主机的实际IP(而非127.0.0.1),Linux环境需额外配置Docker网络访问权限,Windows/macOS可使用host.docker.internal作为主机名。

内容的提问来源于stack exchange,提问作者RezaRastgoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:48:21