postgresql - 如何将卷挂载添加到正在运行的 postgreSQL 容器?
问题描述
我有一个正在运行的 postgreSQL docker 容器,需要添加一个卷挂载。
我按照如何将卷添加到现有 Docker 容器中的步骤进行操作?, (docker commit
在容器上运行以将其保存为映像,并基于该映像启动另一个容器,其中安装了命名卷)。第一个容器中的所有数据文件都存在于第二个容器的 /var/lib/postgres/data 中。
但是,当我尝试查询第二个 postgres 数据库时,我看不到第一个容器中的任何表。几天来一直试图解决这个问题,但没有运气,我在这里遗漏了什么(安装卷是否会掩盖 /var/lib/postres/data 中的现有数据)?
解决方案
提交将不起作用,因为Dockerfile 中定义了卷。
卷在许多情况下都很有用,例如,用于运行数据库存储。然而,由于卷不是容器的“一部分”,它使容器不再可移植——这似乎与“构建一次......随处运行......”的口号直接冲突。
您可以尝试的一种选择是将数据文件夹从现有容器复制到主机,然后使用装载路径启动容器。
docker cp my_db_cotainer:/var/lib/postgresql/data db_data
然后使用此路径启动一个新容器,以便它包含与前一个相同的数据
docker run -d --name some-postgres -v $PWD/db_data/:/var/lib/postgresql/data postgres
对 mysql 也一样
docker cp some-mysql-old:/var/lib/mysql db_backup
docker run --rm --name some-mysql-new -v $PWD/db_backup:/var/lib/mysql -it mysql
推荐阅读
- python - 如何在 ipywidgets textarea 的插入符号处插入文本
- python - Python ModuleNotFoundError:没有名为“的模块”
'' - html - 鼠标经过时带有旋转的语音气泡
- python - datetime.combine with timezone 不同于 datetime.now with timezone
- visual-studio - 用参数值替换硬编码的问题
- vba - 数据透视表创建中的过程调用或参数无效
- reactjs - 用户添加内容时如何在反应导航中再次呈现标题
- database - 承包商和公司之间单边关系的数据库设计
- java - 将 spectron 与 Java 和 selenium 一起用于 Electron 应用程序
- python - Python - tkinter 按钮冻结