如何从Docker容器生成Postgresql Dump?

时间:2015-05-11 14:58:14

标签: postgresql docker containers

我想有办法进入Postgresql容器并从中获取数据转储。

7 个答案:

答案 0 :(得分:23)

从UNIX终端使用以下命令:

docker exec <container_name> pg_dump <schema_name> > backup

以下命令将仅转储所有表中的插入:

docker exec <container_name> pg_dump --column-inserts --data-only  <schema_name> > inserts.sql

答案 1 :(得分:14)

我的容器名为 postgres ,已装入卷-v /backups:/backups

备份gziped DB my_db 我使用:

docker exec postgres pg_dump -U postgres -F t my_db | gzip >/backups/my_db-$(date +%Y-%m-%d).tar.gz

现在我有了

user@my-server:/backups$ ls
my_db-2016-11-30.tar.gz

答案 2 :(得分:3)

虽然上面的mountpoint解决方案看起来很有希望,但以下是在多次迭代后对我有用的唯一解决方案:

docker run -it  -e PGPASSWORD=my_password postgres:alpine  pg_dump  -h hostname -U my_user my_db > backup.sql

在我的案例中有什么独特之处:我在数据库上有一个需要传入的密码;需要传递标签(高山);最后,psql工具的主机版本与docker版本不同。

答案 3 :(得分:1)

另一种解决方法是使用mountpoint启动postgre sql到docker中转储的位置。

喜欢docker run -v <location of the files>。 然后在docker running container

上执行docker inspect
docker inspect <image_id>

你可以找到&#34;卷&#34;标签里面和相应的位置。转到该位置,你可以找到所有的postgresql / mysql文件。它对我有用。让我们知道这是否适合你。

祝你好运

答案 4 :(得分:1)

对于那些拥有权限的人,我成功地使用了以下命令来执行我的转储:

docker exec -i MY_CONTAINER_NAME /bin/bash -c "PGPASSWORD=MY_PASSWORD pg_dump -Fc -h localhost -U postgres MY_DB_NAME" > /home/MY_USER/db-$(date +%d-%m-%y).backup

答案 5 :(得分:0)

要运行具有Postgres用户和密码的容器,您需要具有预先配置的变量作为容器环境变量。 例如:

docker run -it --rm --link <container_name>:<data_container_name> -e POSTGRES_PASSWORD=<password> postgres /usr/bin/pg_dump -h <data_container_name> -d <database_name> -U <postgres_username> > dump.sql

答案 6 :(得分:0)

这个使用 container_name 而不是 database_scheme 的,对我有用:

docker exec {container_name} pg_dump -U {user_name} > {backup_file_name}

例如,对我来说,数据库名称、用户和密码应该在 docker-compose.yaml 中声明

我希望它可以帮助某人