使用docker-compose删除命名卷?

时间:2017-08-04 16:52:42

标签: docker docker-compose volumes

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

version: "3"
services:
  postgres:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/db
volumes:
  db-data:

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

4 个答案:

答案 0 :(得分:26)

docker-compose down -v删除所有附加的卷。请参阅docs

答案 1 :(得分:1)

除了您想丢弃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

我不知道(不进一步讨论)如何最好地确定要删除的Docker卷的名称。

这是在docker-compose版本1.18.0上

答案 2 :(得分:0)

无法使用docker-compose cli来删除特定的命名卷。相反,可以使用docker cli来实现。参见docs

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

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

答案 3 :(得分:0)

这会删除 docker-compose 中定义的所有容器、网络、卷和图像。

tasks {
    jar{
        from({
            configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) }
            configurations.compileClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) }
        })

        exclude ("META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA")
    }
}

" -v " 用于所有卷

" --rmi all " 用于所有图像