postgresql - 在 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 命令的终端输出输出到文件,而不是实际的转储。我最终得到一个本地文件,它只是命令的详细日志。
我错过了什么?
解决方案
我可以在这里想到两个选择:
将卷挂载到本地文件夹并将文件转储到那里。当容器退出时,文件仍将存在于主机上。您不需要以交互方式运行容器。该命令可能看起来像这样(未经测试):
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 简单或有效。
推荐阅读
- android - 是否有可能在 androidstudio 中运行目标 shell?
- php - 如果未预定义全局变量,则抛出错误?
- javascript - 如何解决此“尝试导入错误:'ComponentProps' 未从 './component' 导出。” 将打字稿版本升级到 3.7.3 后?
- javascript - 动画完成不称为 JavaScript DOM
- installation - 安装 mason 包最简单的方法是什么?
- azure-devops - 在完成时从 Azure Devops Build Pipeline 设置 Git 标记
- c# - C# 8.0 - 不能使用默认接口实现
- c++ - 错误:未定义符号:gzclose opencv emscripten
- python-3.x - 无法使用 tkinter 在列表框中打印数组元素
- bash - 比较两个用逗号分隔的列表,找出每个列表中的共同元素和不同元素