version: "3.8" networks: zabbix-net: driver: bridge ipam: config: - subnet: 172.20.0.0/24 services: mysql-server: image: mysql:8.0.36 container_name: mysql-server restart: unless-stopped environment: MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: Zmsl@123 MYSQL_ROOT_PASSWORD: Zmsl@123 TZ: Asia/Shanghai command: > --default-authentication-plugin=mysql_native_password --character-set-server=utf8 --collation-server=utf8_bin volumes: - mysql_data:/var/lib/mysql - mysql_logs:/var/log/mysql - mysql_conf:/etc/mysql/conf.d ports: - "3306:3306" networks: zabbix-net: ipv4_address: 172.20.0.10 zabbix-java-gateway: image: zabbix/zabbix-java-gateway:alpine-6.2-latest container_name: zabbix-java-gateway restart: unless-stopped environment: TZ: Asia/Shanghai networks: zabbix-net: ipv4_address: 172.20.0.20 zabbix-server-mysql: image: zabbix/zabbix-server-mysql:6.2-alpine-latest container_name: zabbix-server-mysql restart: unless-stopped depends_on: - mysql-server - zabbix-java-gateway environment: DB_SERVER_HOST: mysql-server MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: Zmsl@123 MYSQL_ROOT_PASSWORD: Zmsl@123 ZBX_JAVAGATEWAY: zabbix-java-gateway ZBX_JAVAGATEWAY_TIMEOUT: 30 ZBX_START_POLLERS: 5 ZBX_START_POLLERS_UNREACHABLE: 1 TZ: Asia/Shanghai volumes: - /data/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro - zabbix_server:/etc/zabbix - /data/zabbix/server:/var/lib/zabbix - /data/zabbix/log:/var/log/zabbix ports: - "10051:10051" networks: zabbix-net: ipv4_address: 172.20.0.30 zabbix-web-nginx-mysql: image: zabbix/zabbix-web-nginx-mysql:alpine-6.2-latest container_name: zabbix-web-nginx-mysql restart: unless-stopped depends_on: - mysql-server - zabbix-server-mysql environment: PHP_TZ: Asia/Shanghai ZBX_SERVER_HOST: zabbix-server-mysql DB_SERVER_HOST: mysql-server MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: Zmsl@123 MYSQL_ROOT_PASSWORD: Zmsl@123 ports: - "7099:8080" networks: zabbix-net: ipv4_address: 172.20.0.40 zabbix-agent: image: zabbix/zabbix-agent:alpine-6.2-latest container_name: zabbix-agent restart: unless-stopped environment: ZBX_HOSTNAME: zabbix-server-docker ZBX_SERVER_HOST: zabbix-server-mysql ZBX_SERVER_PORT: 10051 ZBX_PASSIVE_ALLOW: "true" ZBX_ACTIVE_ALLOW: "true" volumes: - zabbix_agent:/etc/zabbix ports: - "10050:10050" networks: zabbix-net: ipv4_address: 172.20.0.50 cap_add: - NET_RAW - NET_ADMIN volumes: mysql_data: mysql_logs: mysql_conf: zabbix_server: zabbix_agent:
时间: 2025-08-19 11:06:34 浏览: 10
<think>我们正在使用Docker Compose部署Zabbix监控系统,包括以下组件:
- Zabbix Server
- Zabbix Web界面(使用Nginx和MySQL)
- Zabbix Agent(通常部署在被监控主机上,但这里我们也可以部署一个用于监控Zabbix Server自身)
- MySQL数据库
根据引用[1]和[3],我们可以构建一个docker-compose.yml文件。注意,引用[1]中提供了部分配置,但我们需要完善。
配置要点:
1. 数据库服务:MySQL,需要创建数据库、用户和密码。
2. Zabbix Server服务:依赖数据库,并连接Zabbix Agent。
3. Zabbix Web服务:使用Nginx和MySQL,需要连接到数据库和Zabbix Server。
4. Zabbix Agent服务:需要连接到Zabbix Server。
另外,时区设置很重要,引用[1]和[2]都提到了时区设置(Asia/Shanghai)。
我们采用官方镜像:
- mysql:5.7(或者8.0,但要注意Zabbix版本兼容性)
- zabbix/zabbix-server-mysql
- zabbix/zabbix-web-nginx-mysql
- zabbix/zabbix-agent
下面是一个完整的docker-compose.yml配置示例:
```yaml
version: '3'
services:
mysql-server:
image: mysql:5.7
container_name: mysql-server
environment:
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
MYSQL_ROOT_PASSWORD: root_password
volumes:
- mysql-data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- zabbix-net
restart: unless-stopped
zabbix-server:
image: zabbix/zabbix-server-mysql:latest
container_name: zabbix-server
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
ports:
- "10051:10051"
networks:
- zabbix-net
depends_on:
- mysql-server
restart: unless-stopped
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:latest
container_name: zabbix-web
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
PHP_TZ: Asia/Shanghai
ZBX_SERVER_HOST: zabbix-server
ports:
- "80:8080"
networks:
- zabbix-net
depends_on:
- mysql-server
- zabbix-server
restart: unless-stopped
zabbix-agent:
image: zabbix/zabbix-agent:latest
container_name: zabbix-agent
environment:
ZBX_SERVER_HOST: zabbix-server
ports:
- "10050:10050"
networks:
- zabbix-net
depends_on:
- zabbix-server
restart: unless-stopped
networks:
zabbix-net:
driver: bridge
volumes:
mysql-data:
```
说明:
1. 使用了一个自定义网络`zabbix-net`,所有服务都连接到此网络,以便通过服务名相互访问。
2. 数据库使用卷`mysql-data`持久化数据。
3. Zabbix Web服务的端口映射为80:8080,这样可以通过宿主机的80端口访问。
4. 时区设置:`PHP_TZ: Asia/Shanghai`,确保Web界面时间正确。
5. Zabbix Agent配置了`ZBX_SERVER_HOST`指向zabbix-server,这样Agent就会连接这个Server。
注意:Zabbix Server和Agent的端口10051和10050需要暴露,以便外部Agent连接(如果还需要监控其他主机)。如果只是监控本容器内的服务,也可以不暴露端口,因为它们在同一个网络内。
使用时,将上述内容保存为`docker-compose.yml`,然后运行`docker-compose up -d`。
另外,根据引用[3],可能需要调整一些配置,但上述配置是一个基础可用的版本。
§§相关问题§§
1. 如何验证Zabbix各组件是否正常运行?
2. 如何添加其他主机到Zabbix监控?
3. 如何升级使用Docker Compose部署的Zabbix?</think>以下是使用 Docker Compose 部署 Zabbix 监控系统的完整配置方案,包含 Zabbix Server、Web、Agent 和 MySQL 组件:
```yaml
version: '3'
services:
mysql-server:
image: mysql:8.0
container_name: mysql-server
environment:
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_password
MYSQL_ROOT_PASSWORD: root_password
volumes:
- mysql-data:/var/lib/mysql
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
networks:
- zabbix-net
restart: unless-stopped
zabbix-server:
image: zabbix/zabbix-server-mysql:6.0-latest
container_name: zabbix-server
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_password
ZBX_CACHESIZE: 512M
volumes:
- zabbix-export:/var/lib/zabbix/export
- zabbix-snmptraps:/var/lib/zabbix/snmptraps
ports:
- "10051:10051"
networks:
- zabbix-net
depends_on:
- mysql-server
restart: unless-stopped
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:6.0-latest
container_name: zabbix-web
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_password
PHP_TZ: Asia/Shanghai
ZBX_SERVER_HOST: zabbix-server
ZBX_SERVER_PORT: 10051
ports:
- "80:8080"
volumes:
- zabbix-web:/usr/share/zabbix
networks:
- zabbix-net
depends_on:
- mysql-server
- zabbix-server
restart: unless-stopped
zabbix-agent:
image: zabbix/zabbix-agent:6.0-latest
container_name: zabbix-agent
environment:
ZBX_SERVER_HOST: zabbix-server
ZBX_HOSTNAME: zabbix-server
ZBX_METADATA: linux
ports:
- "10050:10050"
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
networks:
- zabbix-net
depends_on:
- zabbix-server
restart: unless-stopped
networks:
zabbix-net:
driver: bridge
volumes:
mysql-data:
zabbix-export:
zabbix-snmptraps:
zabbix-web:
```
### 配置说明:
1. **MySQL服务**:
- 使用 MySQL 8.0 官方镜像
- 自动创建 `zabbix` 数据库和用户
- 数据持久化到 `mysql-data` 卷
- 设置 UTF8 字符集支持中文[^1]
2. **Zabbix Server**:
- 连接 MySQL 数据库服务
- 优化缓存大小(512MB)
- 暴露 10051 端口供 Agent 连接
- 持久化存储监控数据导出和 SNMP 陷阱
3. **Zabbix Web界面**:
- 使用 Nginx + PHP 组合
- 设置时区为 `Asia/Shanghai`[^1][^2]
- 映射宿主机 80 端口到容器 8080 端口
- 自动连接 Zabbix Server 和 MySQL
4. **Zabbix Agent**:
- 监控 Zabbix Server 自身
- 同步宿主机时区配置
- 暴露 10050 端口用于外部监控
### 部署步骤:
1. 创建 `docker-compose.yml` 文件并填入上述配置
2. 启动服务:
```bash
docker-compose up -d
```
3. 等待初始化完成(约2-5分钟)
4. 访问 `http://<宿主机IP>` 进入 Zabbix Web
5. 使用默认账号登录:
- 用户名: `Admin`
- 密码: `zabbix`
### 验证部署:
```bash
docker-compose ps
```
应显示所有4个容器状态为 `Up`
> **重要安全提示**:生产环境中请修改默认密码(`zabbix_password` 和 `root_password`),并启用 SSL 加密访问[^3]。
阅读全文
相关推荐








