Докер не может удалить все изображения
Я использую докер для 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 }
удалить их один за другим