docker部署PostgreSQL
PostgreSQL 稳定部署 + 自动备份 docker-compose.yml
services:
db:
image: postgres:16-alpine
container_name: postgres_db
restart: always
# 环境变量直接写在这里,方便管理
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: your_super_secret_password
POSTGRES_DB: prod_db
TZ: Asia/Shanghai
volumes:
- postgres_data:/var/lib/postgresql/data
# 健康检查:确保数据库真正可用(不仅仅是容器启动)
healthcheck:
test: ["CMD-SHELL", "pg_isready -U admin -d prod_db"]
interval: 10s
timeout: 5s
retries: 5
networks:
- pg_network
backup:
image: prodrigestivill/postgres-backup-local
container_name: postgres_backup
restart: always
user: root
volumes:
- ./backups:/backups
depends_on:
db:
condition: service_healthy
environment:
- POSTGRES_HOST=db
- POSTGRES_DB=prod_db
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=your_super_secret_password
- TZ=Asia/Shanghai
# 每天凌晨 2:00 执行备份
- SCHEDULE=0 2 * * *
# 保留最近 7 天的备份文件
- BACKUP_KEEP_DAYS=7
# 压缩等级 9 (最高压缩,节省空间)
- GZIP_LEVEL=9
networks:
- pg_network
networks:
pg_network:
driver: bridge
volumes:
postgres_data:💡 运维小贴士(必看):
关于备份文件: 备份成功后,你会在当前目录的
./backups文件夹下看到类似prod_db-20260311-020000.sql.gz的文件。这个文件包含了完整的表结构和数据,你可以通过任何解压软件打开它看 SQL 语句。如何手动触发一次备份? 如果你刚刚改了数据,想立刻存个档,执行这个命令:
Bash
docker exec postgres_backup /backup.sh如何恢复数据? 如果有一天需要换服务器,把这个
yml拷贝过去,启动后执行:Bash
# 假设备份文件叫 backup.sql.gz gunzip -c ./backups/backup.sql.gz | docker exec -i postgres_db psql -U admin -d prod_db关于稳定性的最后提醒: 虽然
postgres_data卷很稳,但建议你定期把./backups文件夹拷贝到你的个人电脑或云盘里。因为如果服务器的整块硬盘坏了,容器和备份就都没了。
License:
CC BY 4.0