使用docker-compose删除命名卷?

Bos*_*osh 32 volumes docker docker-compose

如果我有一个docker-compose文件,例如:

version: "3"
services:
  postgres:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/db
volumes:
  db-data:
Run Code Online (Sandbox Code Playgroud)

...然后docker-compose up创建一个命名的卷db-data.有没有办法通过docker-compose?删除此卷?如果它是一个匿名卷,那么docker-compose rm -v postgres就可以了.但就目前而言,我不知道如何在db-data不恢复docker命令的情况下移除卷.感觉这应该可以在docker-composeCLI中实现.我错过了什么吗?

her*_*erm 43

__CODE__删除所有附加的卷.查看文档

  • 我认为问题在于询问如何删除特定的命名卷,而不是全部删除。那可能吗? (17认同)
  • @herm谢谢,工作.我的上面的评论确实****不适用于**命名的**卷,如文档中明确说明的那样.顺便说一下,我发现同样令人困惑的是同名命令(`-v`)的行为完全不同,具体取决于命令(`rm` vs`down`). (12认同)
  • 您也可以使用docker-compose rm -f -v (3认同)
  • 虽然不是"docker-compose"本身,但您也可以使用`docker volume rm [name]`删除卷,例如`docker volume rm db-data`.另见`docker volume prune` (3认同)

小智 40

2022 年 1 月更新:

这将删除docker-compose中定义所有 容器网络图像

docker-compose down -v --rmi all
Run Code Online (Sandbox Code Playgroud)

“-v”适用于所有卷

“--rmi all”适用于所有图像


jam*_*air 32

没有办法通过docker-composecli来删除特定的命名卷。相反,这可以使用dockercli来实现。请参阅文档

使用docker volume ls查找特定卷的名称。

使用 删除卷docker volume rm VOLUME_NAME。您将需要使用该卷停止并删除容器。

一个示例方法:

# Stop and remove container's using the target volume
docker-compose stop NAME_OF_CONTAINER

# We need the force flag, "-f", as the container is still bound to the volume
docker-compose rm -f NAME_OF_CONTAINER

# Next find your volume name in the following list
docker volume ls

# Finally remove the volume
docker volume rm VOLUME_NAME
Run Code Online (Sandbox Code Playgroud)

  • 据我所知,这确实是删除命名卷的唯一方法,并且应该是可接受的答案。为什么他们把事情搞得如此艰难,我完全不明白。 (3认同)

Cam*_*err 5

我和你有同样的问题,除了我想放弃我的 grafana 容器的工作状态,同时让其他容器运行,这些容器运行分离(即 sudo docker-compose up -d)。这是我想出的程序:

sudo docker-compose ps
sudo docker-compose stop grafana
sudo docker-compose rm --force grafana
sudo docker volume rm metricsmonitoring_grafana_data
sudo docker-compose up --force-recreate -d grafana
Run Code Online (Sandbox Code Playgroud)

我不知道(没有进一步玩)如何最好地确定要删除的 docker 卷的名称。

这是在 docker-compose 1.18.0 版上