安装脚本
# 创建数据目录
mkdir -p /data/docker/postgres/data
# 创建镜像
docker run -d --name postgres -p 15432:5432 --restart=always \
-e TZ=Asia/Shanghai \
-e POSTGRES_PASSWORD=********* \
-e POSTGRES_HOST_AUTH_METHOD=md5 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/docker/postgres/data:/var/lib/postgresql/data \
postgres:13.13-bullseye
# 放开访问端口
firewall-cmd --zone=public --add-port=15432/tcp --permanent && firewall-cmd --reload
命令解释
创建数据目录
mkdir -p /data/docker/postgres/data
mkdir -p:递归创建目录,如果父目录不存在则一并创建
/data/docker/postgres/data:宿主机上的持久化存储目录
目的:确保数据库文件在容器重启或重建后不会丢失
运行 PostgreSQL 容器
docker run -d \ # 后台运行
--name postgres \ # 容器命名为"postgres"
-p 15432:5432 \ # 端口映射
--restart=always \ # 自动重启策略
-e TZ=Asia/Shanghai \ # 时区设置
-e POSTGRES_PASSWORD=********* \ # 数据库密码
-e POSTGRES_HOST_AUTH_METHOD=md5 \ # 认证方式
-v /etc/localtime:/etc/localtime:ro \ # 时区文件挂载
-v /data/docker/postgres/data:/var/lib/postgresql/data \ # 数据目录挂载
postgres:13.13-bullseye # 使用的镜像
关键参数详解:
(1)端口映射 -p 15432:5432
将容器内部的 PostgreSQL 默认端口 5432 映射到宿主机的 15432 端口
为什么用 15432? 避免与宿主机上可能存在的 PostgreSQL 服务冲突
(2)环境变量配置
TZ=Asia/Shanghai:设置容器时区为上海时间(UTC+8)
POSTGRES_PASSWORD=*********:设置超级用户(postgres)的密码
POSTGRES_HOST_AUTH_METHOD=md5:设置客户端认证方式为 md5 密码验证
(3)卷挂载
-v /etc/localtime:/etc/localtime:ro:
将宿主机的时区文件挂载到容器内
:ro表示只读,防止容器修改宿主机文件
-v /data/docker/postgres/data:/var/lib/postgresql/data:
将宿主机目录挂载到容器的数据库存储位置
实现数据持久化(容器删除后数据不丢失)
(4)镜像选择 postgres:13.13-bullseye
使用 PostgreSQL 13.13 版本,基于 Debian Bullseye 的基础镜像,避免使用 latest 标签导致意外升级,13.13 是一个长期支持(LTS)版本,稳定性高
防火墙配置
firewall-cmd --zone=public --add-port=15432/tcp --permanent && firewall-cmd --reload
firewall-cmd:firewalld 防火墙管理工具
–zone=public:针对 public 区域设置规则
–add-port=15432/tcp:开放 TCP 协议的 15432 端口
–permanent:使规则永久生效(重启后仍有效)
&& firewall-cmd --reload:立即重新加载防火墙配置
修改默认密码
ALTER USER postgres WITH PASSWORD 'FNahL#i1Ymd&93vadDs';
安全注意事项
(1)密码安全:
示例中的 *********应替换为强密码
建议使用密码管理工具生成和存储密码
(2)访问控制:
默认配置允许任何主机连接
生产环境应配置 pg_hba.conf限制访问IP
(3)备份策略:
定期备份 /data/docker/postgres/data目录
考虑使用 pg_dump进行逻辑备份
(4)版本选择:
PostgreSQL 13 支持到 2025年11月
如需更长支持周期,可考虑 PostgreSQL 15(支持到2027年)
2357

被折叠的 条评论
为什么被折叠?



