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

时间:2018-06-05 13:39:12

标签: postgresql docker pg-dump

我们通常需要从多个不同版本的数据库中获取pg_dump。我想在Docker容器中使用正确的Postgres版本运行命令,并将转储输出发送到我的文件而不是容器。

我以为我会这样实现它;

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

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

我错过了什么?

1 个答案:

答案 0 :(得分:3)

我可以在这里考虑两个选项:

  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
    
  2. 容器停止后,备份文件仍将保留在<host_folder>

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