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

Docker部署Zabbix-Server启动失败:users表为空问题求助

Docker搭建Zabbix Server集群时数据库Schema未创建完整的问题解决

场景与已执行操作

我正在用Docker搭建包含MySQL容器、Zabbix Server容器和Zabbix Front容器的Zabbix集群,执行了以下启动命令:

1. MySQL容器启动命令

docker run --name zabbix-db --network zabbixnet -e MYSQL_ROOT_PASSWORD="password" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix" -e MYSQL_DATABASE="zabbix" -d mysql

2. Zabbix容器启动命令

docker run --name zabbix-server --network zabbixnet -e DB_SERVER_HOST="zabbix-db" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix" -d zabbix/zabbix-server-mysql

docker run --name zabbix-front --network zabbixnet --link zabbix-server -p80:8080 -e DB_SERVER_HOST="zabbix-db" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix" -e PHP_TZ="Europe/Madrid" -d zabbix/zabbix-web-apache-mysql

遇到的错误

Zabbix Server启动日志报错:

** Preparing Zabbix server
** Using MYSQL_USER variable from ENV
** Using MYSQL_PASSWORD variable from ENV
********************
* DB_SERVER_HOST: zabbix-db
* DB_SERVER_PORT: 3306
* DB_SERVER_DBNAME: zabbix
********************
** Database 'zabbix' already exists. Please be careful with database COLLATE!
** Creating 'zabbix' schema in MySQL
** Preparing Zabbix server configuration file
** Updating '/etc/zabbix/zabbix_server.conf' parameter "ListenIP": ''...removed
** Updating '/etc/zabbix/zabbix_server.conf' parameter "ListenPort": ''...removed
** Updating '/etc/zabbix/zabbix_server.conf' parameter "ListenBacklog": ''...removed
** Updating '/etc/zabbix/zabbix_server.conf' parameter "SourceIP": ''...removed
** Updating '/etc/zabbix/zabbix_server.conf' parameter "LogType": 'console'...updated
** Updating '/etc/zabbix/zabbix_server.conf' parameter "LogFile": ''...removed
** Updating '/etc/zabbix/zabbix_server.conf' parameter "LogFileSize": ''...removed

[...]
** Updating '/etc/zabbix/zabbix_server.conf' parameter "ProxyDataFrequency": ''...removed
** Updating '/etc/zabbix/zabbix_server.conf' parameter "SSLCertLocation": '/var/lib/zabbix/ssl/certs/'...updated
** Updating '/etc/zabbix/zabbix_server.conf' parameter "SSLKeyLocation": '/var/lib/zabbix/ssl/keys/'...updated
** Updating '/etc/zabbix/zabbix_server.conf' parameter "SSLCALocation": '/var/lib/zabbix/ssl/ssl_ca/'...updated
** Updating '/etc/zabbix/zabbix_server.conf' parameter "LoadModulePath": '/var/lib/zabbix/modules/'...updated

** Updating '/etc/zabbix/zabbix_server.conf' parameter "HANodeName": ''...removed
** Updating '/etc/zabbix/zabbix_server.conf' parameter "NodeAddress": ''...removed
** Updating '/etc/zabbix/zabbix_server.conf' parameter "User": 'zabbix'...updated
Starting Zabbix Server. Zabbix 6.2.2 (revision 3545586).
Press Ctrl+C to exit.

     7:20220913:082616.221 Starting Zabbix Server. Zabbix 6.2.2 (revision 3545586).
     7:20220913:082616.221 ****** Enabled features ******
     7:20220913:082616.221 SNMP monitoring:           YES
     7:20220913:082616.221 IPMI monitoring:           YES
     7:20220913:082616.221 Web monitoring:            YES
     7:20220913:082616.221 VMware monitoring:         YES
     7:20220913:082616.221 SMTP authentication:       YES
     7:20220913:082616.221 ODBC:                      YES
     7:20220913:082616.221 SSH support:               YES
     7:20220913:082616.221 IPv6 support:              YES
     7:20220913:082616.221 TLS support:               YES
     7:20220913:082616.221 ******************************
     7:20220913:082616.221 using configuration file: /etc/zabbix/zabbix_server.conf
     7:20220913:082616.223 cannot use database "zabbix": its "users" table is empty (is this the Zabbix proxy database?)

登录MySQL查询确认users表为空:

mysql> select * from users;
Empty set (0.00 sec)

疑问

操作是否有误?是否遗漏关键步骤?Zabbix Server日志显示会创建完整数据库Schema,为何未成功?


问题原因及解决方法

1. 核心原因

启动MySQL容器时,通过MYSQL_DATABASE="zabbix"参数提前创建了空的zabbix数据库,而Zabbix Server容器的初始化逻辑会判断:如果数据库已存在,就跳过完整的Schema导入步骤,仅更新配置文件,导致数据库内只有空表,没有Zabbix所需的初始数据(包括users表的默认管理员账号)。

2. 修复步骤

方法一:重新部署(推荐)

  • 停止并删除现有容器:
docker stop zabbix-front zabbix-server zabbix-db
docker rm zabbix-front zabbix-server zabbix-db
  • 启动MySQL容器时不要指定MYSQL_DATABASE参数,让Zabbix Server容器自动创建并初始化数据库:
docker run --name zabbix-db --network zabbixnet -e MYSQL_ROOT_PASSWORD="password" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix" -d mysql
  • 等待MySQL容器完全启动(约30秒,可通过docker logs zabbix-db查看是否出现ready for connections),再执行原有Zabbix Server和Front容器的启动命令。

方法二:手动导入Zabbix Schema(适合不想重建容器的场景)

  • 进入Zabbix Server容器:
docker exec -it zabbix-server bash
  • 在容器内执行Schema导入命令(Zabbix 6.2版本的SQL文件默认在/usr/share/zabbix-sql-scripts/mysql/目录):
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -h zabbix-db -u zabbix -pzabbix zabbix
  • 导入完成后,重启Zabbix Server容器:
docker restart zabbix-server

3. 额外注意事项

  • MySQL容器启动后必须等待其完全初始化完成,再启动Zabbix相关容器,否则会因数据库未就绪导致Schema导入失败。
  • Zabbix Server容器的初始化逻辑仅在第一次启动时执行,后续重启容器不会重复执行Schema导入。

内容的提问来源于stack exchange,提问作者Francisco de Javier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:20:16