如何从Docker容器创buildPostgres备份

我有一个Docker容器内运行的Postgres 9.5.4数据库。 我正在使用官方的Postgres镜像 ,我一直在尝试从我的数据库创build备份,但目前还没有运气。 根据docker文件,我期待以下命令将dump.tar文件存储在主机中的/ releases /文件夹中(在暂存器容器之外)

docker run -i --rm --link my_postgres:postgres --volume /releases/:/tmp/ postgres:latest pg_dumpall > /tmp/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"? 

任何想法可能是错的?

其实我find了解决办法

 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' 

Docker参数在哪里:

  • -i用于交互式进程,如shell,bash等
  • –rm备份完成后删除容器
  • –link将这个临时容器链接到my_container ,它包含当前正在运行的Postgres数据库。
  • -v / releases /:/ tmp /创build共享卷。 容器中的文件夹/ tmp /中的内容(在本例中为my_backup.tar )将在主机中的文件夹/ releases /上自动可见。

和bash的参数:

  • pg_dumpall将PostgreSQL集群导出到脚本文件中。
  • -h“$ POSTGRES_PORT_5432_TCP_ADDR”获取Postgresvariables的IP地址。
  • -p“$ POSTGRES_PORT_5432_TCP_PORT”从Postgresvariables中获取端口(这些variables仅在我们刚刚创build的时间容器中定义,因为与my_container的链接)
  • -U连接到数据库的用户名