运行 pg_dump 在 docker 容器中并将文件输出到主机

run pg_dump in a docker container and output file to host

我们通常必须 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 命令的终端输出输出到一个文件,而不是实际的转储。我最终得到一个本地文件,它只是命令的详细日志。

我错过了什么?

我可以想到两个选项:

  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 简单或高效。