Docker备份和恢复postgres

时间:2015-07-30 10:17:40

标签: postgresql docker

我使用的是docker postgres:9.4图片。 我需要知道如何备份和恢复仅容量容器。

创建的卷容器:

docker run -v /var/lib/postgresql/data --name dbdata postgres:9.4 /bin/true

使用音量

docker run --name=postgres --volumes-from=dbdata -d -p 6432:5432 postgres:9.4

备份卷容器

docker run --volumes-from dbdata -v $(pwd):/backup postgres:9.4 tar cvf /backup/backup.tar /var/lib/postgresql/data

恢复新容器中的卷

docker run --name=dbdata-new --volumes-from dbdata -v $(pwd):/backup ubuntu:14.04 /bin/sh -c 'cd /var/lib/postgresql/data && tar xvf /backup/backup.tar'

在新卷中使用以创建新的postgres容器:

docker run --name=postgres-new --volumes-from=dbdata-new -d -p 7532:5432 postgres:9.4

问题: 运行新容器时,我在日志中收到以下错误。

initdb:目录“/ var / lib / postgresql / data”存在但不为空 如果要创建新的数据库系统,请删除或清空 目录“/ var / lib / postgresql / data”或运行initdb 使用“/ var / lib / postgresql / data”以外的参数

不确定我做错了什么。有人可以指出我犯错的地方。

2 个答案:

答案 0 :(得分:2)

无法轻松地在非常基本数据的步骤之后重现问题(一个记录一个表一个新数据库):

psql -U postgres -h $(boot2docker ip || echo 'localhost') -p 6432 -c "CREATE DATABASE ttt;"
psql -U postgres -h $(boot2docker ip || echo 'localhost') -p 6432 -d ttt -c "CREATE table a(b int); insert into a(b) values(1);"
psql -U postgres -h $(boot2docker ip || echo 'localhost') -p 6432 -d ttt -c "select * from a;"

当我启动postgres-new时,我在日志中没有例外,数据似乎在那里:

$ psql -U postgres -h $(boot2docker ip || echo 'localhost') -p 7532 -d ttt -c "select * from a;"
 b
---
 1
(1 row)

答案 1 :(得分:2)

data-new --volumes-来自dbdata -v $(pwd):/ backup ubuntu:14.04 / bin / sh -c' cd / var / lib / postgresql / data&& tar xvf /backup/backup.tar'

粗体文字是问题所在。 通过解压文件夹/ var / lib / postgresql / data中的备份,tar命令在上面的文件夹中创建了/ var / lib / postgresql / data。

感谢您提供所有帮助 MyKola