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

Docker环境下运行的PostgreSQL无法成功设置时区问题求助

问题根本原因

你在Adminer中执行的SET TIME ZONE命令属于会话级配置,仅对当前数据库连接生效,连接断开后就会自动恢复为默认配置,因此刷新或重新连接后查询仍然返回UTC时区。由于容器内date命令返回时间正常,说明容器系统时区配置无误,仅需修改PostgreSQL自身的持久化时区配置即可。

解决方案

方案1:启动容器时通过环境变量设置(推荐,操作最简单)

停止并删除原有容器,重新启动时添加TZ和POSTGRES_TIMEZONE环境变量,示例命令:

docker run -d \
  --name postgres \
  -e TZ=Australia/Brisbane \
  -e POSTGRES_TIMEZONE=Australia/Brisbane \
  -v /你的本地数据挂载路径:/var/lib/postgresql/data \
  -p 5432:5432 \
  --restart=always \
  postgres:你的镜像版本

注意:本地数据挂载路径不要修改,避免原有数据库数据丢失。树莓派使用的ARM架构PostgreSQL官方镜像同样支持上述环境变量。

方案2:直接修改容器内PostgreSQL配置文件持久化生效

如果你不想重建容器,可以直接修改配置:

  • 进入postgres容器:docker exec -it 你的postgres容器名 /bin/bash
  • 找到postgresql.conf文件,默认路径为/var/lib/postgresql/data/postgresql.conf
  • 修改配置项:找到timezone和log_timezone两个参数,取消注释并修改为:
    timezone = 'Australia/Brisbane'
    log_timezone = 'Australia/Brisbane'
    
  • 保存退出后重启容器:docker restart 你的postgres容器名

方案3:docker-compose部署的修改方式

如果用docker-compose部署,在docker-compose.yml的postgres服务的environment段添加配置:

services:
  postgres:
    image: postgres:你的镜像版本
    environment:
      - TZ=Australia/Brisbane
      - POSTGRES_TIMEZONE=Australia/Brisbane
    # 其余原有配置保持不变

修改后执行docker-compose up -d重启服务即可。

验证方法

重启完成后重新登录Adminer,执行SHOW TIMEZONE;,返回Australia/Brisbane即为配置生效。也可以执行SELECT NOW();查看返回的时间是否符合布里斯班当地时间。

内容的提问来源于stack exchange,提问作者whats_up_skip

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:45:00