Docker无法删除所有镜像。

4

我是使用 Docker Desktop for Windows。当我尝试使用以下命令删除所有镜像时:

docker rmi $(docker images -q)

我在命令提示符中遇到了以下错误信息:

-q) 中未知的速记标志:'q'

我正在运行 Windows 10 Pro 上的Docker


这是哪个版本的Docker?您可以通过运行“docker version”来查找。还可以尝试将“-q”参数替换为“--quiet”。 - Tamer Shlash
如果你想要清除所有未使用的东西,docker system prune 可能会很有用。 - eiichi
9个回答

5

语法是针对Unix的,因此如果要在Windows上更改命令,则需要在PowerShell或CMD中运行整个命令。

删除容器:

powershell "docker ps -a -q | foreach-object { $i = $PSItem.ToString(); $cmd = 'docker'; & $cmd 'rm' '-f' $i }"

删除图片:

powershell "docker images -a -q | foreach-object { $i = $PSItem.ToString(); $cmd = 'docker'; & $cmd 'rmi' '-f' $i }"

2

虽然这是一个旧问题,但如果你使用的是Windows系统,请从cmd切换到PowerShell。因为cmd会误解一些命令,并试图将“-q”附加到外部rmi命令。

原始答案:Original Answer


1

0

看看类似的问题。你正在使用的语法是Unix专用的docker rmi $(command)。这被称为命令替换,可能在Windows上无法正常工作。


0

这是一个在Linux安装的Docker上运行的Bash Shell语法。要在Windows上运行它,请尝试在Windows上安装Bash Shell并从该Shell内部运行它。Windows命令提示符和PowerShell将无法理解该语法。


0

你忘记了 -a。要删除所有的图片,请使用以下命令:

docker image prune -a -f

请记住,在删除所有图像之前,您必须先删除所有相关容器。

要删除所有正在使用的容器:

docker container prune -f

@kaki gadol,docker image prune -a -f 在 Windows 上运行得非常好,但您需要首先停止 docker stop $(docker ps -a -q) 并删除 docker container prune -f 所有容器。 - veben

0

将此内容保存在docker-clear.bat文件中并执行,以清除容器、镜像、未使用的数据和卷

@echo off
REM Clear all the containers
FOR /f "tokens=*" %%i IN ('docker ps -aq') DO docker stop %%i && docker rm %%i
REM Clear all the images
FOR /f "tokens=*" %%i IN ('docker images --format "{{.ID}}"') DO docker rmi %%i -f
REM Clear unused data
docker system prune -f
REM Clear all volumes
docker volume prune -f

0

Windows 10 Powershell,非常容易。

以下命令显示所有镜像:

docker -a -q

输出如下:

PS C:\Users\UserName> docker images -a -q
86fa138dd93d
7c3a8b83a719
6636e7059d8d

然后,对于每个图像执行以下操作:

docker rmi ##########

其中#####是图像ID


这是一个非常低效的解决方案,无法解决这个问题。 - kaki gadol

0

在Windows中,你应该使用Windows命令。

在PowerShell中,它会是类似这样的:

docker images -a -q | foreach-object { $i = $PSItem.ToString(); $cmd = "docker"; & $cmd "rmi" $i }

在哪里执行以下命令:

docker images -a -q

获取所有镜像的ID(包括中间层),然后

foreach-object { $i = $PSItem.ToString(); $cmd = "docker"; & $cmd "rmi" $i }

逐个删除它们。


“foreach-object” 不是内部或外部命令,也不是可运行的程序或批处理文件。 - Lee
你是在 PowerShell 中运行吗? - evgenyl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接