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

Ale*_*lex 1 postgresql pg-dump docker

我们通常必须从多个不同版本的数据库中 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
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么?

sp0*_*0gg 5

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

  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
    
    Run Code Online (Sandbox Code Playgroud)

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

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