如何完整备份并迁移含数据的PostgreSQL Docker容器至另一设备
完整备份并恢复PostgreSQL Docker容器的两种方法
方法一:使用pg_dumpall全量备份(推荐,跨版本兼容)
备份步骤(源设备)
- 进入运行中的PostgreSQL容器:
docker exec -it <你的容器名或容器ID> bash - 在容器内执行全量备份命令,导出所有数据库的结构与数据到文件:
注:pg_dumpall -U postgres > /var/lib/postgresql/data/full_backup.sqlpostgres为默认超级用户,若使用自定义用户请替换;/var/lib/postgresql/data/是容器默认数据存储目录,确保该目录可被外部访问。 - 退出容器,将备份文件复制到本地主机:
docker cp <容器名或ID>:/var/lib/postgresql/data/full_backup.sql ./
恢复步骤(目标设备)
- 启动同版本的PostgreSQL容器并挂载数据卷:
docker run -d --name postgres-restore -v postgres-data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=<你的密码> postgres:9.6.24 - 将本地备份文件复制到目标容器内:
docker cp ./full_backup.sql postgres-restore:/var/lib/postgresql/data/ - 进入容器执行恢复命令:
docker exec -it postgres-restore bash psql -U postgres -f /var/lib/postgresql/data/full_backup.sql - 恢复完成后重启容器:
docker restart postgres-restore
方法二:直接复制Docker数据卷(快捷高效,同环境适用)
备份步骤(源设备)
- 先停止运行中的PostgreSQL容器,避免数据写入不一致:
docker stop <容器名或ID> - 导出数据卷为压缩包:
注:可通过docker run --rm -v <你的数据卷名>:/data -v $(pwd):/backup ubuntu tar cvf /backup/postgres_data.tar /datadocker volume ls查看数据卷名称。
恢复步骤(目标设备)
- 创建空数据卷:
docker volume create postgres-data-new - 将压缩包导入新数据卷:
docker run --rm -v postgres-data-new:/data -v $(pwd):/backup ubuntu tar xvf /backup/postgres_data.tar -C / --strip-components=1 - 使用新数据卷启动PostgreSQL容器:
docker run -d --name postgres-restore -v postgres-data-new:/var/lib/postgresql/data -e POSTGRES_PASSWORD=<你的密码> postgres:9.6.24
内容的提问来源于stack exchange,提问作者Vishak Raj
相关产品推荐
相关产品推荐

