按照Docker网站上的说明,我正在try 备份/恢复PostgreSQL数据库,但数据没有恢复.

数据库映像使用的卷包括:

VOLUME  ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]

而CMD是:

CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"]

我使用以下命令创建DB容器:

docker run -it --name "$DB_CONTAINER_NAME" -d "$DB_IMAGE_NAME"

然后我连接另一个容器手动插入一些数据:

docker run -it --rm --link "$DB_CONTAINER_NAME":db "$DB_IMAGE_NAME" sh -c 'exec bash'
psql -d test -h $DB_PORT_5432_TCP_ADDR
# insert some data in the db
<CTRL-D>
<CTRL-D>

然后创建TAR归档:

$ sudo docker run --volumes-from "$DB_CONTAINER_NAME" --rm -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /etc/postgresql /var/log/postgresql /var/lib/postgresql

现在,我删除用于数据库的容器并创建另一个同名容器,并try 恢复之前插入的数据:

$ sudo docker run --volumes-from "$DB_CONTAINER_NAME" --rm -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar 

但是表是空的,为什么没有正确恢复数据呢?

推荐答案

备份您的数据库

docker exec -t your-db-container pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql

恢复您的数据库

cat your_dump.sql | docker exec -i your-db-container psql -U postgres

Database相关问答推荐

MongoDB 中的 OVER PARTITION 类似功能

mysql数据库自动分区

使用自动递增主键将 csv 导入 sqlite

SQL 查询至少其中一项

android 应用程序与 web 服务通信的安全性

如何将 MySQL 5.5.40 升级到 MySQL 5.7

按纬度/经度进行半径搜索

SQL 概念 LEFT OUTER JOIN 和 WHERE NOT EXISTS 基本相同吗?

对百万行表,MySQL 的 LIKE 查询的性能怎样?

Oracle 和 SQL Server 中的 NVARCHAR 之间的区别?

如何将视图的所有权限授予任意用户

设置默认数据库连接 Rails

从 postgresql 转储文件填充 MySQL 数据库

添加具有初始(但不是默认)值的新列的最佳方法?

有什么理由不应该在生产中使用 h2 数据库?

如何在 SQL Server 中生成并手动插入唯一标识符?

SQL - 如何使用 MS SQL 2008 R2 备份数据库并导出为 MDF 文件

为什么 OODBMS 不像 RDBMS 那样普遍?

xampp phpmyadmin,格式参数不正确

数据库 - (行或记录、列或字段)?