web-dev-qa-db-ja.com

DockerコンテナからPostgresql Dumpを生成する方法は?

Postgresqlコンテナーに入り、そこからデータダンプを取得する方法があります。

UNIX端末から次のコマンドを使用します。

docker exec <container_name> pg_dump <schema_name> > backup

次のコマンドは、すべてのテーブルからの挿入のみをダンプします。

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

postgresという名前のコンテナがあり、ボリューム-v /backups:/backups

Gzipされた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
14
Jekis

上記のマウントポイントソリューションは有望に見えましたが、以下は複数回の反復の後、私のために働いた唯一のソリューションです。

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

私の場合でユニークだったのは、データベースにパスワードを渡す必要があることです。タグ(Alpine)を渡す必要があります。最後に、ホストバージョンのpsqlツールは、ドッカーバージョンとは異なります。

3
jonathanjg

別の回避方法は、dockerのダンプの場所へのマウントポイントでpostgre sqlを起動することです。

お気に入り docker run -v <location of the files>。次に、コンテナを実行しているドッカーでドッカー検査を実行します

docker inspect <image_id>

「Volumes」タグとその対応する場所を見つけることができます。その場所に移動すると、すべてのpostgresql/mysqlファイルを見つけることができます。

幸運を

1
Pratik

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

0
learner