运行 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 命令的终端输出输出到一个文件,而不是实际的转储。我最终得到一个本地文件,它只是命令的详细日志。
我错过了什么?
我可以想到两个选项:
将卷装载到本地文件夹并将文件转储到那里。当容器退出时,该文件仍将存在于主机上。您不需要以交互方式 运行 容器。该命令可能看起来像这样(未测试):
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>
中。
- 按原样启动容器,运行
docker cp
将文件从容器中拉出到本地文件系统,然后停止容器。可能不如选项 1 简单或高效。
我们通常必须 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 命令的终端输出输出到一个文件,而不是实际的转储。我最终得到一个本地文件,它只是命令的详细日志。
我错过了什么?
我可以想到两个选项:
将卷装载到本地文件夹并将文件转储到那里。当容器退出时,该文件仍将存在于主机上。您不需要以交互方式 运行 容器。该命令可能看起来像这样(未测试):
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>
中。
- 按原样启动容器,运行
docker cp
将文件从容器中拉出到本地文件系统,然后停止容器。可能不如选项 1 简单或高效。