我想有办法进入Postgresql容器并从中获取数据转储。
答案 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 <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 中声明
我希望它可以帮助某人