postgresql - Docker 备份和恢复 postgres

标签 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”以外的参数

不知道我做错了什么。有人可以指出我在哪里犯了错误。

最佳答案

使用非常简陋的数据(一个记录一个表一个新的数据库)的步骤无法轻松重现问题:

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)

关于postgresql - Docker 备份和恢复 postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31721086/

相关文章:

docker - 使用 Travis 时,已安装的 Docker 卷具有不同的所有权

linux - Bash 脚本在进入 docker 容器时退出

javascript - 在检索到最后一条记录后从 postgresql 中提取记录

ruby-on-rails - Ruby On Rails、Postgresql - 每分钟组的 Date_Part 或 Extract

sql - 当一行在另一个表中匹配时排除组

ruby - 使用 Unicode 归类算法在 Ruby 中排序

git - 无法通过 ssh 将私钥添加到 docker build

bash - Docker 中的 Logstash - 通过卷安装时找不到配置文件

Docker 在 Windows 10 上初始化失败

sql - Postgres 获取电子邮件域的计数