Как создать дамп Postgresql из контейнера Docker?

Я хотел бы иметь возможность войти в контейнер Postgresql и получить от него дамп данных.

Ответ 1

Используйте следующую команду с терминала UNIX:

docker exec <container_name> pg_dump <schema_name> > backup

Следующая команда будет выгружать только вставки из всех таблиц:

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

Ответ 2

У меня есть контейнер с именем 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

Теперь у меня есть

[email protected]:/backups$ ls
my_db-2016-11-30.tar.gz

Ответ 3

Другим методом обхода является запуск postgre sql с точкой монтирования в местоположение дампа в докере.

например, docker run -v <location of the files>. Затем выполните проверку докера в контейнере, работающем на докере

docker inspect <image_id>

вы можете найти тег "Тома" внутри и соответствующее местоположение. Вернитесь к местоположению, и вы можете найти все файлы postgresql/mysql. Он работал для меня. Сообщите нам, если это сработало и для вас.

Удачи

Ответ 4

Хотя решение mountpoint выше выглядело многообещающим, единственное решение, которое работало для меня после нескольких итераций:

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

Что было уникальным в моем случае: у меня есть пароль в базе данных, который необходимо передать; необходимо передать в тег (альпийский); и, наконец, хосты версии psql были разными для версий докеров.