首页 > 解决方案 > 在 docker 容器中运行 pg_dump 并将文件输出到主机

问题描述

我们通常必须从多个不同版本的数据库中进行 pg_dump。我想在具有正确 Postgres 版本的 Docker 容器内运行命令,并将转储输出到我的文件而不是容器。

我以为我会这样实现它;

docker run -it postgres:9.6.6-alpine pg_dump --file backupFile.bak --dbname=CONNECTIONSTRING --verbose --format=c --blobs > backupFile.bak

但是,这只是将 pg_dump 命令的终端输出输出到文件,而不是实际的转储。我最终得到一个本地文件,它只是命令的详细日志。

我错过了什么?

标签: postgresqldockerpg-dump

解决方案


我可以在这里想到两个选择:

  1. 将卷挂载到本地文件夹并将文件转储到那里。当容器退出时,文件仍将存在于主机上。您不需要以交互方式运行容器。该命令可能看起来像这样(未经测试):

    docker run --rm -v <host_folder>:<container_folder> postgres:9.6.6-alpine pg_dump --file backupFile.bak --dbname=CONNECTIONSTRING --verbose --format=c --blobs
    

<host_folder>容器停止后,备份文件仍将保留。

  1. 按原样启动容器,运行docker cp将文件从容器中拉出到本地文件系统,然后停止容器。可能不如选项 1 简单或有效。

推荐阅读