📄 docker-compose.yml 完整内容
yaml
version: '3.8'
services:
postgres:
# 使用指定的镜像(国内加速镜像)
image: docker.1ms.run/library/postgres:16
container_name: postgres16
restart: always
# 端口映射:宿主机端口:容器端口
ports:
- "5432:5432"
# 环境变量
environment:
POSTGRES_PASSWORD: your_strong_password # 【必填】设置超级用户密码
POSTGRES_USER: postgres # 可选,默认为 postgres
POSTGRES_DB: postgres # 可选,默认创建同名数据库
TZ: Asia/Shanghai # 设置容器时区
# 挂载卷:数据持久化 + 自定义配置文件
volumes:
# 数据目录映射(将容器数据持久化到宿主机的 ./data 目录)
- ./data:/var/lib/postgresql/data
# 自定义配置文件挂载(只读),需要提前在宿主机准备 postgresql.conf
- ./conf/postgresql.conf:/etc/postgresql/postgresql.conf:ro
# 可选:初始化脚本目录(首次启动时自动执行 .sql/.sh 文件)
- ./init-scripts:/docker-entrypoint-initdb.d:ro
# 启动命令:指定使用自定义配置文件
command: >
postgres
-c config_file=/etc/postgresql/postgresql.conf
# 资源限制(CPU / 内存)
deploy:
resources:
limits:
cpus: '2' # 最多使用 2 个 CPU 核心
memory: 4G # 最多使用 4GB 内存
reservations:
cpus: '1' # 预留 1 个 CPU 核心
memory: 2G # 预留 2GB 内存
# 可选:设置共享内存大小(PostgreSQL 推荐至少 64MB,默认 64MB)
# shm_size: 256mb📝 使用前准备
创建必要的宿主机目录和文件
bash
mkdir -p ./data ./conf ./init-scripts准备 PostgreSQL 配置文件(如果不需要自定义配置可跳过此步)
方法一:从官方镜像中导出默认配置
bash
docker run -i --rm docker.1ms.run/library/postgres:16 cat /usr/share/postgresql/postgresql.conf.sample > ./conf/postgresql.conf方法二:直接创建空白文件(容器会使用内置默认值)
bash
touch ./conf/postgresql.conf然后根据需求编辑
./conf/postgresql.conf。
(可选)准备初始化脚本
将.sql或.sh文件放入./init-scripts目录,容器在首次初始化数据库时会自动按文件名顺序执行。
🚀 启动与管理命令
bash
# 启动服务(后台运行)
docker-compose up -d
# 查看运行状态
docker-compose ps
# 查看实时日志
docker-compose logs -f postgres
# 停止服务
docker-compose down
# 停止并删除数据卷(危险!会清除所有数据)
# docker-compose down -v🔧 关键配置说明
⚠️ 关于资源限制的说明
如果你使用的 Docker Compose 版本较老,或者不想依赖 --compatibility 模式,可以将 deploy 部分替换为以下兼容写法(直接放在 postgres 服务下):
yaml
# 兼容写法(无需 deploy)
cpus: '2'
mem_limit: 4g
mem_reservation: 2g完整替换示例:
yaml
services:
postgres:
# ... 其他配置保持不变 ...
cpus: '2'
mem_limit: 4g
mem_reservation: 2g✅ 验证配置
启动后,执行以下命令验证资源限制是否生效:
bash
docker stats postgres16输出中应显示 CPU 和内存限制与你设置的一致。
📌 安全建议
密码管理:生产环境请勿将密码明文写在
docker-compose.yml中。推荐使用环境变量文件(.env)或 Docker Secret。示例:创建
.env文件,写入POSTGRES_PASSWORD=your_strong_password,然后在docker-compose.yml中使用POSTGRES_PASSWORD=${POSTGRES_PASSWORD}。
配置文件权限:确保
./conf/postgresql.conf文件权限正确,避免被意外修改。
🧹 清理与备份
备份数据:直接备份
./data目录即可。备份配置文件:备份
./conf/postgresql.conf和docker-compose.yml。
如果你需要针对特定性能参数(如 shared_buffers、max_connections)进行调优,可以参考 PGTune 生成配置,然后写入 ./conf/postgresql.conf 中。