docker-compose 挂载卷剩余

docker-compose mounted volume remain

我在我的一个项目中使用 docker-compose。在开发过程中,我将我的源目录挂载到我的 docker 服务之一的卷中,以便于开发。同时,我有一个数据库服务(psql),它挂载了一个用于持久数据存储的命名卷。

我从解决方案开始,一切正常

$ docker-compose up -d

当我检查我的卷时,我看到了命名和 "unnamed"(源卷)。

$ docker volume ls
DRIVER              VOLUME NAME
local               226ba7af9689c511cb5e6c06ceb36e6c26a75dd9d619360882a1012cdcd25b72
local               myproject_data

我遇到的问题是,当我这样做时

$ docker-compose down
...
$ docker volume ls
DRIVER              VOLUME NAME
local               226ba7af9689c511cb5e6c06ceb36e6c26a75dd9d619360882a1012cdcd25b72
local               myproject_data

两卷都保留了下来。每次我运行

$ docker-compose down
$ docker-compose up -d

为我的源挂载创建了一个新卷

$ docker volume ls
DRIVER              VOLUME NAME
local               19181286b19c0c3f5b67d7d1f0e3f237c83317816acbdf4223328fdf46046518
local               226ba7af9689c511cb5e6c06ceb36e6c26a75dd9d619360882a1012cdcd25b72
local               myproject_data

我知道这不会发生在我的部署服务器上,因为它不会挂载源,但是有没有办法不让挂载的源持久化?

您可以在 docker 运行 中使用 --rm 选项。要将它与 docker-compose 一起使用,您可以使用

docker-compose rm -v 使用 docker-compose stop

停止容器后

如果您浏览有关 Data volumes 的文档,它会提到

Data volumes persist even if the container itself is deleted.

这意味着,停止容器不会删除它创建的卷,无论是命名卷还是匿名卷。

现在,如果您进一步阅读 Removing volumes

A Docker data volume persists after a container is deleted. You can create named or anonymous volumes. Named volumes have a specific source form outside the container, for example awesome:/bar. Anonymous volumes have no specific source. When the container is deleted, you should instruct the Docker Engine daemon to clean up anonymous volumes. To do this, use the --rm option, for example:

$ docker run --rm -v /foo -v awesome:/bar busybox top

This command creates an anonymous /foo volume. When the container is removed, the Docker Engine removes the /foo volume but not the awesome volume.

只需使用 down 命令删除卷:

docker-compose down -v