Docker启动PostgreSql并设置时间与主机同步

在 Docker 中启动 PostgreSql 时,需要配置容器的时间与主机同步。可以通过在 Dockerfile 或者 Docker Compose 文件中设置容器的时区,或者使用宿主机的时间来同步容器的时间。这样可以确保容器中的 PostgreSql 与主机的时间保持一致,避免在使用PostgreSql 的过程中遇到问题。

本文是在启动 PostgreSql 的时候,设置 PostgreSql 与宿主机的时间一致的方式

配置Docker与宿主机时间同步

可以在Docker启动容器时,将主机的时间挂载到容器中。这样,容器将使用宿主机的时间。例如,使用以下命令启动容器:

shell 复制代码
docker run -v /etc/localtime:/etc/localtime:ro <image_name>
使用案例

配置postgresql与宿主机时间同步

shell 复制代码
docker run -itd --privileged=true --name postgresql_test -v /opt/postgredata:/opt/postgredata -v /etc/localtime:/etc/localtime:ro -e POSTGRES_PASSWORD=<PostgreSql密码> -p 5435:5432 --shm-size 1G -d postgres:11.7
命令说明

在Docker容器中使用-v /etc/localtime:/etc/localtime:ro命令是将主机的/etc/localtime文件挂载到容器的/etc/localtime路径,并将挂载设置为只读模式(ro表示"read-only",只读)。

这个命令的作用是将主机的时区设置传递给容器,以便容器使用与主机相同的时间设置。通过将主机的/etc/localtime文件挂载到容器中,容器将直接使用主机的时区文件,从而与主机保持时间同步。

将挂载设置为只读模式是为了防止容器修改主机的时间设置。这样可以确保容器只能读取主机的时间设置,而不能修改它。这是为了保持时间同步的一种安全措施。

总结起来,-v /etc/localtime:/etc/localtime:ro命令的作用是将主机的时区文件挂载到容器中,并将挂载设置为只读模式,以实现时间同步并确保安全性。

验证时间是否一致

查看宿主机时间
shell 复制代码
date
查看容器时间
shell 复制代码
docker exec <容器名称|容器id> date
宿主机与容器时间对比

以上命令只能一个一个的查宿主机和容器的时间,在执行的时候,两个命令难免会有时间差,不能很好的对比两个之间的差别,可以将两个命令同时执行,以进行对比,可以使用 【;】 分号,同时执行以上两个命令

shell 复制代码
date ; docker exec <容器名称|容器id> date

该命令将通过返回宿主机和容器的时间

PostgreSql 时间与宿主机时间不一致会造成的问题

数据不一致

PostgreSql 是一个数据库管理系统,它依赖于正确的时间戳来记录和处理数据。如果容器中的 PostgreSql 与主机的时间不同步,可能会导致数据的时间戳不准确,从而导致数据不一致性。例如,如果容器中的时间比主机时间快,那么在容器中创建的数据可能会被错误地认为是未来的数据。

日志和故障排查困难

在容器中运行的 PostgreSql 会生成日志文件,用于故障排查和性能分析。如果容器中的时间与主机不同步,日志文件中的时间戳将不准确,使得故障排查变得困难。无法准确追踪事件发生的顺序和时间,从而增加了故障排查的复杂性。

安全性问题

PostgreSql 中的一些安全机制和协议可能依赖于正确的时间。例如,SSL/TLS 握手过程中会验证证书的有效期,如果容器中的时间与主机不同步,可能会导致证书验证失败,从而影响安全性。

相关推荐
Waay6 分钟前
图文详解|K8s Pod内部结构
docker·云原生·kubernetes
l1t27 分钟前
DeepSeek总结的在 DuckDB 中试驾 Lance 数据湖仓格式
数据库·人工智能·机器学习·duckdb
PaperData38 分钟前
2017-2025年中国10米分辨率土地利用/覆盖栅格数据(from Esri LULC)
数据库·数据分析·学习方法
小二·40 分钟前
LangGraph 多智能体实战:从零搭建 Multi-Agent 协作系统
java·开发语言·数据库
羑悻的小杀马特1 小时前
工业时序数据选型的几点思考:从存储成本与查询延迟说起
数据库·人工智能
小旭95271 小时前
商品详情实现与缓存问题(穿透、击穿、雪崩)解决方案
java·数据库·spring boot·后端·缓存
zgscwxd2 小时前
MySQL 远程访问并结合花生壳实现外网穿透
sql
我本楚狂人www2 小时前
Spring 两大核心思想(一):IoC
java·数据库·spring
熊文豪2 小时前
标量子查询消除:一次让查询性能提升千倍的优化器手术
数据库·电科金仓
他们叫我阿冠2 小时前
Day4学习--MySQL高级
数据库·学习·mysql