2016-09-09 13 views
0

私はPostgres 9.5.4データベースをドッカーコンテナ内で実行しています。私はofficial Postgres imagesを使用しています。私は自分のデータベースからバックアップを作成しようとしていますが、これまでのところ運がありません。 docker documentationよると私は(一時的なドッキングウィンドウコンテナ外)ホストマシンで/フォルダ/リリースdockerコンテナからPostgresバックアップを作成する方法

docker run -i --rm --link my_postgres:postgres --volume /releases/:/tmp/ postgres:latest pg_dumpall > /tmp/dump.tar 

dump.tarファイルを保存するために、次のコマンドを期待していた。しかし、これは、次のエラーがスローされます。

pg_dumpall: could not connect to database "template1": could not connect to server: Connection refused 
     Is the server running locally and accepting 
     connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 

何が間違っている可能性がありますか?

+0

あなたのpostgresコンテナはどのように作成されましたか? – levi

答えて

1

実際に私が見つけた解決策

docker run -i --rm --link my_container:postgres -v /releases/:/tmp/ postgres:latest bash -c 'exec pg_dumpall -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres > /tmp/my_backup.tar' 

どこドッカー引数:シェルのようなインタラクティブなプロセスでは

  • -i、bashの、など
  • --rmバックアップ完了後にコンテナを削除する場合
  • --linkこの一時的なコンテナをmy_containerにリンクするために、現在実行中のPostgresデータベースが含まれています。
  • -v/releases /:/ tmp/共有ボリュームを作成します。コンテナ内の/tmp/フォルダ内のコンテンツ(この場合はmy_backup.tar)は、ホストマシンの/releases/フォルダに自動的に表示されます。

とBash引数:

  • pg_dumpallはスクリプトファイルにPostgreSQLのクラスタをエクスポートします。
  • -h "$ POSTGRES_PORT_5432_TCP_ADDR" Postgres変数からIPアドレスを取得します。 「$ POSTGRES_PORT_5432_TCP_PORT」-p
  • はPostgresの変数の出力ポートを取得し(これらの変数は、my_containerとの連携の結果として、唯一先ほど作成した一時的なコンテナで定義されています)
  • -Uデータベースに接続するためのユーザ名
関連する問題