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

94

Я пытаюсь удалить контейнер докера с помощью этой команды:

docker rmi <Image-Id>

Очевидно, я заменил Image-Id на Id, который использую:

docker images

Но я вижу ошибку ниже:

Error response from daemon: conflict: unable to delete <Image-ID> (must be forced) - image is being used by stopped container xxxxxxxxxxx
Мехрдад Бабаки
источник

Ответы:

121

Вы также можете использовать --force , -fпринудительное удаление изображения

Если вы используете флаг -f и указываете короткий или длинный идентификатор изображения, эта команда отменяет пометки и удаляет все изображения, соответствующие указанному идентификатору.

  docker rmi -f <image_id> 
Adiii
источник
1
Спасибо, все сработало, но есть проблема. Я удалил образ размером 10 ГБ, но после его удаления я не вижу никаких изменений в свободном пространстве на диске.
Mehrdad Babaki
1
вы удалили тома, прикрепленные к изображению, и проверили ли вы размер изображения каждого
Adiii
1
Не совсем, я новичок в докере. Я попробую этот инструмент. Кстати, могу ли я использовать командную строку для определения громкости и их удаления?
Mehrdad Babaki
1
да docker volume ls; к объему списка и удалить, объем докер гт v_id
Adiii
40

Вам нужно удалить остановленный контейнер с помощью docker rm, а затем вы можете удалить образ, который он использует docker rmi.

Дэвид Мэйз
источник
3
Это часть любого полного ответа. Вы можете принудительно удалить или удалить остановленное изображение.
bmacnaughton 07
28

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

docker rm  $(docker ps -q -a)

Здесь мы перечисляем процессы докеров только по идентификатору, а затем удаляем их; однако docker rm удаляет только остановленные контейнеры.

Затем вернитесь и удалите изображения, используя:

docker image rm <image_id>
Ангус
источник
22

Вы должны сначала удалить контейнер.
Принудительный - это последний метод.

#check container
docker ps -a

#remove container
docker rm containerID
Hideyasu.T
источник
3
Ясно лучший ответ. Единственный, кто объясняет, как получить список остановленных контейнеров.
Марко
4

Если docker rmi <image-id>не сработало, попробуйте следующее:

Остановить все запущенные контейнеры

docker stop $(docker ps -aq)

Удалить все контейнеры

docker rm $(docker ps -aq)

Удалить все изображения

docker rmi $(docker images -q)
Арилван
источник
3

В дополнение к другим ответам у меня была такая же проблема с использованием Docker для Mac, но я docker ps -aне отображал запущенных контейнеров. Беговые docker imagesшоу:

docker/desktop-storage-provisioner   v1.0                605a0f683b7b        2 months ago        33.1MB
k8s.gcr.io/kube-controller-manager   v1.15.5             1399a72fa1a9        6 months ago        159MB
k8s.gcr.io/kube-proxy                v1.15.5             cbd7f21fec99        6 months ago        82.4MB
k8s.gcr.io/kube-apiserver            v1.15.5             e534b1952a0d        6 months ago        207MB
k8s.gcr.io/kube-scheduler            v1.15.5             fab2dded59dd        6 months ago        81.1MB
docker/kube-compose-controller       v0.4.23             a8c3d87a58e7        11 months ago       35.3MB
docker/kube-compose-api-server       v0.4.23             f3591b2cb223        11 months ago       49.9MB
k8s.gcr.io/coredns                   1.3.1               eb516548c180        16 months ago       40.3MB
k8s.gcr.io/etcd                      3.3.10              2c4adeb21b4f        17 months ago       258MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        2 years ago         742kB

Все эти образы используются приложением Docker, если у вас включен Kubernetes. В настройках Docker для Mac есть раздел для Kubernetes. Если вы нажмете «Показать системные контейнеры (дополнительно)», они появятся в docker ps.

Если вы хотите удалить эти изображения, вам нужно отключить Kubernetes через приложение Docker для Mac, а затем повторить попытку.

Эрик
источник
2

Контейнеры Docker работают поверх образов докеров, вы можете удалить образ, только если он не прикреплен ни к какому контейнеру.! Итак, вам нужно остановить контейнер и удалить контейнер, после чего вы можете удалить идентификатор изображения.

docker stop контейнер-идентификатор и docker rm контейнер-идентификатор

Затем попробуйте удалить изображение docker rmi image-id

Дополнительная информация приведена в ссылке ниже. Ура.!

https://docs.docker.com/config/pruning/

Сурья Киран
источник
Это должен быть правильный ответ после процесса остановки контейнера (docker-compose stop) -> удалить контейнер (docker rm <имя контейнера>) -> удалить связанные изображения (docker rmi <image_id>).
кта
1

Если цель состоит в том, чтобы освободить дисковое пространство, можно использовать еще один не упомянутый подход docker system prune. Он напечатает предупреждение, на которое следует обратить внимание:

WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache

Это не приведет к удалению именованных изображений, но очистит промежуточные безымянные изображения. В зависимости от размеров используемых контейнеров это может сэкономить значительный объем дискового пространства.

Эдвард
источник
0

Если вы изменили Dockerfileи используете docker compose, вы можете просто перестроить свой образ, запустив его docker-compose с --buildопцией!

ans1genie
источник
Если вы сделали какие - либо изменения на Dockerfileвас shoudn't удалить изображение себя просто использовать флаг --buildс docker-composeтак отстроить новое изображение с изменениями
ans1genie