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

Posted

技术标签:

【中文标题】删除所有停止的容器:“docker rm”至少需要 1 个参数【英文标题】:Remove all stopped containers: "docker rm" requires at least 1 argument 【发布时间】:2017-12-20 15:45:06 【问题描述】:

我正在读一本关于 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)

当我运行它时,我得到:

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

您能帮我了解我应该怎么做才能获得预期的结果吗?

【问题讨论】:

How to remove old Docker containers的可能重复 如果你有最近的 docker 版本至少 1.11,我想,就做docker container prune 【参考方案1】:

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

$ docker ps -a

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

$ docker container prune 

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

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.

【讨论】:

使用 -f 强制修剪停止的容器。类似的图像。使用 --help 检查选项。【参考方案2】:

这可能只是意味着您没有状态为“已退出”的容器。

命令变为:

sudo docker rm -v

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

但是今天,无论如何,这将通过docker container prune 完成。

【讨论】:

【参考方案3】:
$ 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'.

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

简单的选择,运行 docker pssudo

$ sudo docker rm -v $(sudo docker ps -aq -f status=exited)

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

$ sudo -s
# docker rm -v $(docker ps -aq -f status=exited)
# exit

或者您可以让您的用户访问 docker 套接字,这样就不再需要 sudo

$ sudo usermod -aG docker $USER
$ newgrp docker

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

$ docker rm -v $(docker ps -aq -f status=exited)

【讨论】:

这似乎比我(接受的)答案更完整。赞成。【参考方案4】:

似乎正在发生的是docker 是由不同的用户启动的。因此,docker ps -aq -f status=exited 由于permission 问题而无法运行,结果得到blank 结果。

运行 docker rm 抱怨由于空白结果而缺少参数。

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:

【讨论】:

【参考方案5】:

其实是配股问题....报错信息:

Got permission denied while trying to connect to the Docker daemon socket at unix://

告诉你你无法连接到在 root 下运行的 docker 守护进程。您应该决定是否要使用带有# sudo 或 root 用户的 docker。

Manage Docker as a non-root user

此外,docker rm 抱怨找不到要删除的图像,因此无法删除图像。

命令docker rm $(docker ps -aq -f status=exited) 与最新的 docker 版本 18.09.0 一样好,但您也可以使用docker container prune,这是更具交互性的方式。

【讨论】:

以上是关于删除所有停止的容器:“docker rm”至少需要 1 个参数的主要内容,如果未能解决你的问题,请参考以下文章

停止并删除所有 docker 容器

如何批量删除Docker中已经停止的容器

如何批量删除Docker中已经停止的容器

text 停止/删除所有Docker容器

sh 停止/删除所有Docker容器

sh 停止并删除所有docker容器