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
上記のマウントポイントソリューションは有望に見えましたが、以下は複数回の反復の後、私のために働いた唯一のソリューションです。
docker run -it -e PGPASSWORD=my_password postgres:Alpine pg_dump -h hostname -U my_user my_db > backup.sql
私の場合でユニークだったのは、データベースにパスワードを渡す必要があることです。タグ(Alpine)を渡す必要があります。最後に、ホストバージョンのpsqlツールは、ドッカーバージョンとは異なります。
別の回避方法は、dockerのダンプの場所へのマウントポイントでpostgre sqlを起動することです。
お気に入り docker run -v <location of the files>
。次に、コンテナを実行しているドッカーでドッカー検査を実行します
docker inspect <image_id>
「Volumes」タグとその対応する場所を見つけることができます。その場所に移動すると、すべてのpostgresql/mysqlファイルを見つけることができます。
幸運を
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