Докер не может удалить все изображения

Я использую докер для Windows. Когда я пытаюсь удалить все мои изображения с помощью этой команды:

docker rmi $(docker images -q)

Я получил это сообщение об ошибке в командной строке:

unknown shorthand flag: 'q' in -q)

Я бегу докер на окне 10 Pro

7 ответов

Синтаксис специфичен для 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 }"

Старый вопрос, но если вы используете Windows, переключитесь с cmd на PowerShell. cmd неверно интерпретирует некоторые команды и пытается присоединить -q к команде outter rmi.

Windows 10 Powershell, это легко.

Следующая команда показывает все изображения:

Докер -a -q

выводит это:

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

затем для каждого изображения

Докер RMI ##########

Где ##### - идентификатор изображения

Используйте команды docker system prune -a или docker image prune -a для удаления любых неиспользуемых или висячих изображений.

Это синтаксис оболочки bash, который будет работать на установках Linux в Docker. Чтобы заставить его работать в Windows, попробуйте установить оболочку bash в Windows и запустить ее из этой оболочки. Командная строка Windows и PowerShell не будут понимать этот синтаксис.

Сохраните это в 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

Посмотрите на похожую проблему. Синтаксис, который вы используете, специфичен для Unix docker rmi $(command), Это называется подстановкой команд и, вероятно, не будет работать в Windows.

Вы забыли -a, Чтобы удалить все изображения, используйте это:

docker rmi -f $(docker images -a -q)

И помните, что вы должны удалить все связанные контейнеры, прежде чем удалять все изображения.

Чтобы удалить все контейнеры, включая их тома, используйте:

docker rm -vf $(docker ps -a -q)

Если вы хотите удалить все подряд (неиспользуемые контейнеры, тома, сети и образы):

docker system prune -a --volumes

В окнах вы должны Windows команды.

В powershell это будет что-то вроде:

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

куда

Докер изображения -a -q

получает идентификаторы всех изображений (включая промежуточные) и

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

удалить их один за другим

Другие вопросы по тегам