postgresql - 如何将卷挂载添加到正在运行的 postgreSQL 容器中?

标签 postgresql docker

我有一个正在运行的 postgreSQL docker 容器,需要添加一个卷安装。
我遵循了 How can I add a volume to an existing Docker container? 中的步骤,(在容器上运行 docker commit 以将其保存为镜像,并基于该镜像启动另一个容器,并在其中安装了命名卷)。来自第一个容器的所有数据文件都存在于第二个容器的/var/lib/postgres/data 中。
但是,当我尝试查询第二个 postgres 数据库时,我看不到第一个容器中的任何表。几天来一直试图解决这个问题,但没有运气,我在这里遗漏了什么(安装卷是否掩盖了/var/lib/postres/data 中的现有数据)?

最佳答案

提交将不起作用,因为存在 volume defined in the Dockerfile .

Volumes are useful in many cases, for example, for running database-storage. However, since volumes are not 'part' of a container, it makes containers no longer portable - which seems in direct conflict with the slogan "Build once... Run anywhere.."


docker commit data container with VOLUME
您可以尝试的一种选择是将数据文件夹从现有容器复制到主机,然后使用装载路径启动容器。
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

关于postgresql - 如何将卷挂载添加到正在运行的 postgreSQL 容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62826890/

相关文章:

c# - 将 IN 谓词与字符串数组一起使用时,PostgreSQL 缺少运算符

docker - 如何在Docker容器中运行grails-vue配置文件?

Docker 和服务集群

mysql - 使用 dockerfile/mysql mysqld_safe mysqld 来自pid文件错误

postgresql - 每天选择特定时间范围的时间戳数据

ruby-on-rails - 如何在 Arel 中对连接列进行类型转换

启动fork时出现Maven错误,请检查日志中的输出

docker - 如何在家庭 Web 服务器上托管 Ghost 博客

postgresql - 如何将 JSON 对象推送到 JSONB 列中的嵌套数组

sql - 为具有复杂关系的 3 个表创建 View