docker volume rm --force 没有影响

docker volume rm --force 没有影响

根据官方文档可以“强制”删除卷。文档中对 的含义仍不太明确--force。据我目前在网上找到的信息,这意味着删除仍在被其他容器使用的卷。

使用该--force选项似乎没有影响:

$ docker volume create mydata
$ docker docker run -v mydata:/mydata alpine:latest /bin/sh -c "touch /mydata/mydata.test; ls /mydata"
$ docker volume rm --force mydata
Error response from daemon: unable to remove volume: remove mydata: volume is in use - [1cbcfa3d47a32db7b0075e113216f7146a436a4da22a97dc2f7b60c68de95c3d]

这与省略标志时的输出相同--force。这是错误还是我误解了什么?

$ docker version
Client:
 Version:       18.01.0-ce
 API version:   1.35
 Go version:    go1.9.2
 Git commit:    03596f5
 Built: Wed Jan 10 20:09:13 2018
 OS/Arch:       linux/amd64
 Experimental:  false
 Orchestrator:  swarm
Server:
 Engine:
  Version:      18.01.0-ce
  API version:  1.35 (minimum version 1.12)
  Go version:   go1.9.2
  Git commit:   03596f5
  Built:        Wed Jan 10 20:07:43 2018
  OS/Arch:      linux/amd64
  Experimental: false

答案1

我对所有帖子中的所有答案都感到恼火,它们没有为 OP 提到的情况提供解决方案:--force 标志没有帮助。

解决方法(注意,您真的应该知道自己在做什么!):

docker volume ls # To list the volumes which currently exist

# To get the absolute path to the directory on your system where docker
# actually stores this volume
docker volume inspect --format '{{ .Mountpoint }}' <volume-name> 

# E.g. sudo rm -rf /var/lib/docker/volumes/database_volume (without the 
# _data directory)
sudo rm -rf <path-from-above> 

# Needed so docker will reload its volumes-directory to no longer list the
# deleted volume under docker volume ls and no longer make headaches on any
# build- or run-attempts.
sudo service docker restart 

答案2

使用 --filter 标志查看哪些容器正在使用该卷:

docker ps --filter volume=mydata

然后,停止使用该卷的容器。

最后,如果您愿意的话,请删除该卷:

docker volume rm --force mydata

答案3

根据我的经验,-f如果卷不存在,该标志会使命令不会失败。这与经典rm命令的工作方式类似。

如果命令在脚本内部执行,这很有用。

答案4

docker volume rm不会让您删除仍然被容器引用的卷,即使容器已停止并且您使用了该--force参数。

错误消息告诉您必须已删除以便能够删除卷。 在您的例子中,它是 ID 为 的容器1cbcfa3d47a32db7b0075e113216f7146a436a4da22a97dc2f7b60c68de95c3d

这个问题在 GitHub 上了解更多信息。

相关内容