首页 > 解决方案 > 如何从不再存在的数据中清除 docker 卷?

问题描述

我提前道歉,因为由于我缺乏 docker 知识,我会说一些不正确的东西。

所以我想将 postgres 数据库连接到我的 IDE pycharm。

我决定从 docker hub 部署 postgres 映像并使用以下命令创建 docker 容器:

docker run --name PSTGRS -p 5432:5432 -v /home/****/Desktop/pagila-master:/var/lib/postgresql/data  -e GRANT_SUDO=yes -e POSTGRES_PASSWORD=password postgres

使用-v标志我已将标准卷绑定/var/lib/postgresql/data到我的某些文件夹。我在那个文件夹中有一些数据库和表,当我将数据库连接到我的 IDE 时它工作正常。

但最近我删除了我的文件夹、postgres 容器、postgres 映像和所有相关卷。我使用docker prune volume了命令,然后确保使用docker volume ls命令没有留下任何卷。

问题是即使我从 docker hub 提取了新的 postgres 映像并创建了新容器并将卷绑定到另一个空文件夹,当我通过数据库连接到我的 IDE 时,它仍然显示以前不存在的表。

所以我的问题是如何解决它?如何摆脱那些我什至不知道在哪里找到的文件?

先谢谢你了!

标签: postgresqldocker

解决方案


您已经创建了一个 Docker绑定挂载。由于规范的左侧volumes:是完整路径,因此数据库文件位于主机.../Desktop/pagila-master目录中。它们不是由docker volume;管理的。您可以使用普通命令删除这些rm(可能需要sudo根据所有权进行访问)。

如果您确实想docker volume管理这些,您需要一个命名卷。从语法上看,这看起来像一个没有斜杠的简单名称。存储将位于 Docker 的本地文件系统空间内,您不应尝试直接访问它(在 MacOS 和 Windows 系统上几乎不能),这可能会影响您选择使用哪个。

docker volume create pagila-master
docker run -v pagila-master:/var/lib/postgresql/data ... postgres
#             ^^^^^^^^^^^^^ just the volume name
#                           not a complete filesystem path
docker stop PSTGRS  # the docker run --name name
docker rm PSTGRS
docker volume rm pagila-master

推荐阅读