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


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> 

1
Дякую, це спрацювало нормально, але є проблема. Я видалив образ розміром 10 ГБ, але після його видалення я не бачу жодних змін у вільному просторі на диску.
Мехрдад Бабакі

1
ви видалили томи, прикріплені зображенням, і чи перевірили розмір зображення кожного з них
Adiii

1
Не дуже, я новачок у докері. Я спробую інструмент. До речі, чи можу я використовувати командний рядок для виявлення гучності та їх видалення?
Мехрдад Бабакі

1
так обсяг докера ls; щоб перелічити том і видалити, докер том rm v_id
Adiii

40

Потрібно видалити зупинений контейнер за допомогою docker rm, а потім можна видалити зображення, яке він використовує docker rmi.


3
Це частина будь-якої повної відповіді. Ви можете або примусово видалити, або видалити зупинене зображення.
bmacnaughton

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

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, Ви можете видалити зображення, лише якщо воно не прикріплене до жодного контейнера.! Отже, вам потрібно зупинити контейнер і видалити контейнер, після чого ви можете видалити ідентифікатор зображення.

docker зупиняє container-id та docker rm container-id

Потім спробуйте видалити image docker rmi image-id

Деякі додаткові відомості, наведені в посиланні нижче. Вітаємо!

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


Це повинна бути правильна відповідь після процесу зупинки контейнера (docker-compose stop) -> видалити контейнер (docker rm <ім'я контейнера>) -> видалити пов'язані зображення (docker rmi <image_id>).
kta

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опцією!


Якщо ви зробили будь - які зміни на Dockerfileвас shoudn't видалити зображення себе просто використовувати прапор --buildз docker-composeтак відбудувати нове зображення зі змінами
ans1genie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.