树莓派Raspbian系统Docker环境PostgreSQL容器时间异常问题咨询
问题根因
- 32位ARM架构libseccomp组件兼容性bug:你当前使用的32位Raspbian系统搭载的libseccomp版本偏低,会错误过滤PostgreSQL镜像依赖的时间相关系统调用,导致读取到异常时间戳(比如你遇到的2071年、1970年)。Nginx镜像没有触发该过滤规则,因此时间显示正常。
- PostgreSQL镜像缺失时区解析依赖:alpine版本的PostgreSQL镜像默认未安装tzdata时区数据库,仅传递TZ环境变量、或只挂载
/etc/localtime无法正常识别时区配置,会出现时间解析错误。
修复步骤
- 升级宿主机libseccomp版本
先执行常规升级:
sudo apt update sudo apt install -y libseccomp2
如果你使用的是Buster版本的Raspbian,默认源的libseccomp版本仍不满足要求,可从backports源安装更新版本:
echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee /etc/apt/sources.list.d/backports.list sudo apt update sudo apt install -y -t buster-backports libseccomp2
升级完成后重启Docker服务生效:
sudo systemctl restart docker
- 配置PostgreSQL容器时区
可选两种方案:
- 方案1:直接传递TZ环境变量给非alpine版本的PostgreSQL镜像
docker run -it -e TZ=Asia/Shanghai postgres:12 date
- 方案2:同时挂载宿主机本地时间与时区配置文件
docker run -it -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro postgres:12 date
如果需要使用alpine版本的PostgreSQL,启动时先安装tzdata依赖即可:
docker run -it --entrypoint sh postgres:alpine -c "apk add --no-cache tzdata && export TZ=Asia/Shanghai && date"
内容的提问来源于stack exchange,提问作者Adam Yao
相关产品推荐
相关产品推荐

