如何从docker容器创建Postgres备份

时间:2016-09-09 03:11:36

标签: postgresql docker

我在docker容器中运行了 Postgres 9.5.4 数据库。我正在使用official Postgres images,我一直在尝试从我的数据库创建备份,但到目前为止还没有运气。根据{{​​3}}我希望以下命令将 dump.tar 文件存储在主机中的 / releases / 文件夹中(在临时docker容器外)

  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"?

知道可能出现什么问题吗?

1 个答案:

答案 0 :(得分:2)

其实我找到了解决方案

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 / 创建共享卷。容器中文件夹 / tmp / 内的内容(在本例中为 my_backup.tar )将自动显示在 / releases / 文件夹中主机。

和bash争论:

  • pg_dumpall 将PostgreSQL群集导出到脚本文件中。
  • -h" $ POSTGRES_PORT_5432_TCP_ADDR" 从Postgres变量中获取IP地址。
  • -p&#34; $ POSTGRES_PORT_5432_TCP_PORT&#34; 从Postgres变量中获取端口(这些变量仅在我们刚创建的时态容器中定义,与<强> my_container
  • -U 用于连接数据库的用户名