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
相关产品推荐
相关产品推荐

