我正在尝试备份/恢复PostgreSQL数据库,正如Docker网站上所解释的那样,但数据没有恢复。
数据库映像使用的卷是:
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
现在我删除用于db的容器,并创建另一个同名的容器,并尝试恢复之前插入的数据:
$ sudo docker run --volumes-from "$DB_CONTAINER_NAME" --rm -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar
但是表是空的,为什么数据没有正确恢复?
我在尝试使用db_dump恢复数据库时遇到了这个问题。我通常使用dbeaver来恢复-但是收到一个psql转储,所以必须想出一个方法来恢复使用docker容器。
Forth推荐并由soviet编辑的方法对我很有效:
猫your_dump。sql | docker exec -i your-db-container psql -U postgres -d dbname
(因为这是一个单一的db转储,而不是多个db,我包括了名称)
然而,为了让它工作,我还必须进入docker容器和项目所在的virtualenv。这回避了我一点之前弄清楚-因为我收到以下docker错误。
读取Unix @->/var/run/docker。Sock: read:由对等体重置连接
这可能是由文件/var/lib/docker/network/files/local-kv.db引起的。我不知道这句话的准确性:但我相信我看到了这一点,因为我不在本地使用docker,因此没有这个文件,它正在寻找,使用Forth的答案。
然后我导航到正确的目录(与项目)激活virtualenv,然后运行接受的答案。砰,像陀螺一样工作。希望这能帮助到其他人!
我在尝试使用db_dump恢复数据库时遇到了这个问题。我通常使用dbeaver来恢复-但是收到一个psql转储,所以必须想出一个方法来恢复使用docker容器。
Forth推荐并由soviet编辑的方法对我很有效:
猫your_dump。sql | docker exec -i your-db-container psql -U postgres -d dbname
(因为这是一个单一的db转储,而不是多个db,我包括了名称)
然而,为了让它工作,我还必须进入docker容器和项目所在的virtualenv。这回避了我一点之前弄清楚-因为我收到以下docker错误。
读取Unix @->/var/run/docker。Sock: read:由对等体重置连接
这可能是由文件/var/lib/docker/network/files/local-kv.db引起的。我不知道这句话的准确性:但我相信我看到了这一点,因为我不在本地使用docker,因此没有这个文件,它正在寻找,使用Forth的答案。
然后我导航到正确的目录(与项目)激活virtualenv,然后运行接受的答案。砰,像陀螺一样工作。希望这能帮助到其他人!