删除所有已停止的容器:"docker rm"至少需要1个参数

Mic*_*ael 10 docker

我正在读一本关于码头的书.它已经有几年了.

我会引用:

If you want to get rid of all your stopped containers, you can use
the output of docker ps -aq -f status=exited , which gets the
IDs of all stopped containers. For example:
$ docker rm -v $(docker ps -aq -f status=exited)
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到:

michael@michael-desktop:~$ sudo docker rm -v $(docker ps -aq -f status=exited)
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30/containers/json?all=1&filters=%7B%22status%22%3A%7B%22exited%22%3Atrue%7D%7D: dial unix /var/run/docker.sock: connect: permission denied
"docker rm" requires at least 1 argument(s).
See 'docker rm --help'.

Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]

Remove one or more containers
Run Code Online (Sandbox Code Playgroud)

你能帮我理解我应该做些什么才能获得预期目的.

Sid*_*ota 7

为了删除我们所有停止的容器,您可以先运行

$ docker ps -a
Run Code Online (Sandbox Code Playgroud)

这为您提供了正在运行和已停止的容器列表,您可以从中选择要删除的容器。但是如果你想摆脱所有停止的容器,那么你需要使用

$ docker container prune 
Run Code Online (Sandbox Code Playgroud)

这通过向您提供以下消息来删除所有停止的容器。

Warning! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
your container id list will be printed.
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 6

它可能只是意味着您没有状态为"已退出"的容器.

然后命令变为:

sudo docker rm -v
Run Code Online (Sandbox Code Playgroud)

缺少任何参数都会触发您看到的错误消息.

但今天,docker container prune无论如何都会这样做.


BMi*_*tch 6

$ sudo docker rm -v $(docker ps -aq -f status=exited)
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get
http://%2Fvar%2Frun%2Fdocker.sock/v1.30/containers/json?all=1&filters=%7B%22status%22%3A%7B%22exited%22%3Atrue%7D%7D:
dial unix /var/run/docker.sock: connect: permission denied
"docker rm" requires at least 1 argument(s).
See 'docker rm --help'.
Run Code Online (Sandbox Code Playgroud)

权限被拒绝消息来自嵌入的docker ps命令。它由父sudo命令之外的 shell 运行,并将输出传递给以rootsudo身份运行docker rm。有几个修复程序。

最简单的选项,运行docker pssudo

$ sudo docker rm -v $(sudo docker ps -aq -f status=exited)
Run Code Online (Sandbox Code Playgroud)

选项二是以 root 身份运行整个 shell:

$ sudo -s
# docker rm -v $(docker ps -aq -f status=exited)
# exit
Run Code Online (Sandbox Code Playgroud)

或者您可以让您的用户访问 docker 套接字,因此sudo不再需要:

$ sudo usermod -aG docker $USER
$ newgrp docker
Run Code Online (Sandbox Code Playgroud)

以上是一次性更改,并通过 docker 隐式授予该用户 root 访问权限。然后你可以运行:

$ docker rm -v $(docker ps -aq -f status=exited)
Run Code Online (Sandbox Code Playgroud)