上一篇文章写到如何通过docker-compose部署graylog-6.3,部署完后发现时区为UTC,下面的图中,显示的是6:20,实际时间应该为14:20
在这里插入图片描述
本以为是个简单的问题,改改docker-compose.yml就行了,没想到改完compose配置重新部署后,后页面上还是没变,折腾了几个小时才最终弄好,下面具体讲解一下怎么改的。

docker-compose.yml中增加时区相关的配置

mongo service修改

environment块增加TZ: Asia/Shanghai

services:
    environment:
      TZ: Asia/Shanghai

datanode service修改

environment增加下面几个配置

environment:
  TZ: Asia/Shanghai
  GRAYLOG_DATANODE_JAVA_OPTS: "-Duser.timezone=Asia/Shanghai"  # Data Node核心Java时区

时区使用宿主机的时区/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro

volumes:
  - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro

graylog-server修改

environment块增加这几个配置
environment:
  TZ: Asia/Shanghai
  GRAYLOG_TIMEZONE: Asia/Shanghai
  GRAYLOG_SERVER_JAVA_OPTS: -Duser.timezone=Asia/Shanghai
volumes增加对宿主机时区的挂载
 volumes:
    - /etc/localtime:/etc/localtime:ro  # 宿主机时间文件
    - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro
最关键的,增加一个graylog.conf ,也进行挂载

内容如下,核心就是root_timezone=Asia/Shanghai其他的可以不用管

is_leader=true
node_id_file=/usr/share/graylog/data/config/node-id
password_secret=
root_password_sha2=
root_timezone=Asia/Shanghai
bin_dir=/usr/share/graylog/bin
data_dir=/usr/share/graylog/data
plugin_dir=/usr/share/graylog/plugin
http_bind_address=0.0.0.0:9000
stream_aware_field_types=false
disabled_retention_strategies=none,close
allow_leading_wildcard_searches=false
allow_highlighting=false
field_value_suggestion_mode=on
output_batch_size=500
output_flush_interval=1
output_fault_count_threshold=5
output_fault_penalty_seconds=30
processor_wait_strategy=blocking
ring_size=65536
inputbuffer_ring_size=65536
inputbuffer_wait_strategy=blocking
message_journal_enabled=true
message_journal_dir=data/journal
lb_recognition_period_seconds=3
mongodb_uri=mongodb://mongo/graylog
mongodb_max_connections=1000

挂载到/data/graylog6/config/graylog.conf

 volumes:
    - /etc/localtime:/etc/localtime:ro  # 宿主机时间文件
    - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro
    - /data/graylog6/config/graylog.conf:/usr/share/graylog/data/config/graylog.conf

以下是修改后完整的docker-compose.yml文件

version: '3.8'

services:
  mongodb:
    image: mongo:6.0
    container_name: graylog-mongodb
    restart: unless-stopped
    networks:
      - graylog
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /data/graylog6/mongodb/db:/data/db
      - /data/graylog6/mongodb/config:/data/configdb

  datanode:
    image: graylog/graylog-datanode:6.3
    container_name: graylog-datanode
    environment:
      TZ: Asia/Shanghai
      GRAYLOG_DATANODE_JAVA_OPTS: "-Duser.timezone=Asia/Shanghai"  # Data Node核心Java时区
    volumes:
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
  graylog:
    image: graylog/graylog:6.3
    container_name: graylog-server
    depends_on:
      mongodb:
        condition: service_healthy
      datanode:
        condition: service_started
    restart: unless-stopped
    networks:
      - graylog
    environment:
      GRAYLOG_PASSWORD_SECRET: "${GRAYLOG_PASSWORD_SECRET}"
      GRAYLOG_ROOT_PASSWORD_SHA2: "${GRAYLOG_ROOT_PASSWORD_SHA2}"
      GRAYLOG_HTTP_BIND_ADDRESS: 0.0.0.0:9000
      GRAYLOG_HTTP_EXTERNAL_URI: http://xxxxxxxx:9000/  #外网访问地址根据自己的ip进行修改
      GRAYLOG_MONGODB_URI: mongodb://mongodb:27017/graylog
      TZ: Asia/Shanghai
      GRAYLOG_TIMEZONE: Asia/Shanghai
      GRAYLOG_SERVER_JAVA_OPTS: -Duser.timezone=Asia/Shanghai
    ports:
      - "9000:9000"
      - "12201:12201/udp"
    volumes:
      - /data/graylog6/graylog:/usr/share/graylog/data/data
      - /data/graylog6/journal:/usr/share/graylog/data/journal
      - /etc/localtime:/etc/localtime:ro  # 宿主机时间文件
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro
      - /data/graylog6/config/graylog.conf:/usr/share/graylog/data/config/graylog.conf
networks:
  graylog:
    driver: bridge

重启

执行下列命令进行重启

docker compose down && docker compose up -d --force-recreate

终于显示为正常的时间了
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐