gpt4 book ai didi

postgresql - 如何从Docker容器创建Postgres备份

转载 作者:行者123 更新时间:2023-12-02 21:25:21 25 4
gpt4 key购买 nike

我有一个在docker容器中运行的 Postgres 9.5.4 数据库。我正在使用official Postgres images,并且一直在尝试从数据库中创建备份,但到目前为止还算不上成功。根据docker documentation,我期望以下命令将 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"?

知道有什么问题吗?

最佳答案

其实我已经找到了解决方案

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“$ POSTGRES_PORT_5432_TCP_PORT” 从Postgres变量中获取端口(这些变量仅在我们刚刚创建的临时容器中定义,这是与 my_container 链接的结果)
  • -U 用于连接到数据库的用户名
  • 关于postgresql - 如何从Docker容器创建Postgres备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39403242/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com