nagios是一款不错的服务探测软件,将本地安装版本的nagios移植到容器版并部署在公有云服务器后,出现了时区不正确的现象。
docker-compose文件内容如下:
version: '3'
services:
nagios:
#image: harbor.test.stesh.cn/jasonrivers/nagios:4.4.8
image: harbor.test.stesh.cn/jasonrivers/nagios:20230927
container_name: nagios
ports:
- "8080:80" # 映射到宿主机的端口
#- "5666:5666" # 映射到宿主机的端口
environment:
- TZ="Asia/Shanghai"
- NAGIOSADMIN_USER=nagiosadmin # Nagios 管理员用户名
- NAGIOSADMIN_PASS=Lab@1234 # Nagios 管理员密码
volumes:
- /etc/localtime:/etc/localtime
- ./config:/opt/nagios/etc # 配置文件目录
- ./var:/opt/nagios/var
- ./run:/var/run
#- ./data:/opt/nagios/var # 数据目录
#- ./plugins:/opt/Custom-Nagios-Plugins # 自定义插件目录
- ./libexec:/opt/nagios/libexec
#- ./apacheconfig/nagios.conf:/etc/apache2/sites-available/nagios.conf
restart: always
networks:
nagios-network:
ipv4_address: 172.18.4.2
entrypoint:
- sh
- -euc
- |
rm -rf /opt/nagios/var/*
chmod 777 /opt/nagios/var
rm -rvf /var/run/*
chmod 777 /var/run
mkdir -p /var/run/apache2
/usr/local/bin/start_nagios
networks:
nagios-network:
driver: bridge
ipam:
config:
- subnet: 172.18.4.0/24
name: nagios-network
根据gpt介绍,nagios会使用当前系统的时间和时区进行调用,修改当前系统时区的方式是:
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo systemctl restart nagios
但是容器方式可能有特殊,会使用TZ环境变量。可是,当前的docker-compose.yml文件中明明是有TZ="Asia/Shanghai"
的配置的,难道是引号的问题。
删掉引号,docker-compose restart
后发现还是不行,且容器内的TZ值还是有引号。
难道是restart不生效,直接:
docker-compose down --remove-orphans
docker-compose up -d
发现已经可以了。
总结:
- 稳妥起见,实现容器时区正确配置的方法是同时使用TZ=Asia/Shanghai和/etc/localtime文件映射。
- 修改docker-compose.yml中的环境变量一般无需引号。且修改后,需要彻底停止容器后再次启动。