Docker compose docker compose装入的卷保留

Docker compose docker compose装入的卷保留,docker-compose,docker-volume,Docker Compose,Docker Volume,我正在我的一个项目中使用docker compose。在开发过程中,为了便于开发,我将源目录装载到docker服务中的一个卷中。同时,我有一个db服务(psql),它挂载一个用于持久数据存储的命名卷 我从解决方案开始,一切都很好 $ docker-compose up -d 当我检查卷时,我会看到命名卷和“未命名卷”(源卷) 我遇到的问题是,当我 $ docker-compose down ... $ docker volume ls DRIVER VOLUME NA

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

我从解决方案开始,一切都很好

$ docker-compose up -d
当我检查卷时,我会看到命名卷和“未命名卷”(源卷)

我遇到的问题是,当我

$ 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 run中使用
--rm
选项。要使用它,你可以使用

docker compose rm-v
使用
docker compose stop停止容器后

如果你看一下关于的文档,它提到

即使删除了容器本身,数据卷也会保持不变

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

现在,如果您进一步阅读
删除卷

删除容器后,Docker数据卷仍然存在。你可以 创建命名卷或匿名卷。命名卷具有特定的 容器外部的源表单,例如awesome:/bar。匿名的 卷没有特定的源。删除容器后,您可以 应该指示Docker引擎守护进程清除匿名 卷。为此,请使用--rm选项,例如:

$ docker run --rm -v /foo -v awesome:/bar busybox top
此命令创建一个匿名/foo卷。当容器 删除后,Docker引擎将删除/foo卷,但不会删除some卷 音量

您可以在docker run中使用
--rm
选项。要使用它,你可以使用

docker compose rm-v
使用
docker compose stop停止容器后

如果你看一下关于的文档,它提到

即使删除了容器本身,数据卷也会保持不变

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

现在,如果您进一步阅读
删除卷

删除容器后,Docker数据卷仍然存在。你可以 创建命名卷或匿名卷。命名卷具有特定的 容器外部的源表单,例如awesome:/bar。匿名的 卷没有特定的源。删除容器后,您可以 应该指示Docker引擎守护进程清除匿名 卷。为此,请使用--rm选项,例如:

$ docker run --rm -v /foo -v awesome:/bar busybox top
此命令创建一个匿名/foo卷。当容器 删除后,Docker引擎将删除/foo卷,但不会删除some卷 音量


只需使用down命令删除卷:

docker-compose down -v

只需使用down命令删除卷:

docker-compose down -v

谢谢你的回复。这有点奏效,但如果在
docker compose down
之后调用
docker compose rm-v
,我会得到
没有停止的容器。我必须在
docker compose停止
后跟着
docker compose rm-v
删除我的匿名卷。据我所知,这是最好的办法。不过,如果在
docker compose down
中为此设置一个标志就好了。类似于命名卷的
--volumes
标志。感谢您的回复。这有点奏效,但如果在
docker compose down
之后调用
docker compose rm-v
,我会得到
没有停止的容器。我必须在
docker compose停止
后跟着
docker compose rm-v
删除我的匿名卷。据我所知,这是最好的办法。不过,如果在
docker compose down
中为此设置一个标志就好了。类似于命名卷的
--volumes
标志。