Docker备份和恢复postgres
我使用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的/数据”存在,但如果你想创建一个新的数据库系统,删除或清空目录“的/ var / lib中/ PostgreSQL的/数据”或与参数运行initdb的不是空除“/ var / lib / postgresql / data”之外
不知道我做错了什么。 有人可以指出我犯错的地方吗?
遵循具有非常基本数据的步骤(一个记录一个表一个新的数据库),不能轻松地重现问题:
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)
data-new --volumes-from 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。
链接地址: http://www.djcxy.com/p/87097.html上一篇: Docker Backup and restore postgres
下一篇: How to turn on tracing in a unit test using a ResourceTestRule?