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值还是有引号。
2023-12-12T04:41:55.png

难道是restart不生效,直接:

docker-compose down --remove-orphans
docker-compose up -d

发现已经可以了。

2023-12-12T04:42:11.png

总结:

  1. 稳妥起见,实现容器时区正确配置的方法是同时使用TZ=Asia/Shanghai和/etc/localtime文件映射。
  2. 修改docker-compose.yml中的环境变量一般无需引号。且修改后,需要彻底停止容器后再次启动。
最后修改:2024 年 05 月 11 日
如果觉得我的文章对你有用,请随意赞赏