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

L_H*_*L_H 5 postgresql docker

我有一个正在运行的 postgreSQL docker 容器,需要添加卷安装。

我按照如何将卷添加到现有 Docker 容器?,(docker commit在容器上运行以将其保存为映像,并基于该映像启动另一个容器,并安装了命名卷)。第一个容器中的所有数据文件都存在于第二个容器的 /var/lib/postgres/data 中。

但是,当我尝试查询第二个 postgres 数据库时,我看不到第一个容器中的任何表。几天来一直试图解决这个问题,但没有成功,我是否在这里遗漏了一些东西(安装卷是否会掩盖 /var/lib/postres/data 中的现有数据)?

Adi*_*iii 3

提交将不起作用,因为Dockerfile 中定义了卷

卷在许多情况下都很有用,例如,用于运行数据库存储。然而,由于卷不是容器的“一部分”,它使得容器不再可移植——这似乎与“构建一次……随处运行……”的口号直接冲突。

docker commit 带有 VOLUME 的数据容器

您可以尝试的一种选择是将数据文件夹从现有容器复制到主机,然后使用安装路径启动容器。

docker cp my_db_cotainer:/var/lib/postgresql/data  db_data
Run Code Online (Sandbox Code Playgroud)

然后使用此路径启动一个新容器,以便它将包含与前一个容器相同的数据

docker run -d --name some-postgres -v $PWD/db_data/:/var/lib/postgresql/data postgres
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)