繁体   English   中英

Docker备份和还原Postgres

[英]Docker Backup and restore 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 / data”存在但不为空如果要创建新的数据库系统,请删除或清空目录“ / var / lib / postgresql / data”,或使用参数运行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)

从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的所有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM