Ошибка Docker не может удалить Docker-контейнер, конфликт: невозможно удалить ссылку на хранилище


165

Я хочу удалить контейнер в Docker, но возникает ошибка, когда вы хотите удалить

Мой следующий шаг перед удалением контейнера, см. Список существующих контейнеров

sts@Yudi:~/docker$ sudo docker ps -as

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
78479ffeba5c        ubuntu              "/bin/bash"         42 hours ago        Exited (0) 42 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)
0bd2b54678c7        training/webapp     "python app.py"     5 days ago          Exited (0) 5 days ago                         backstabbing_ritchie   0 B (virtual 323.7 MB)
0adbc74a3803        training/webapp     "python app.py"     5 days ago          Exited (143) 5 days ago                       drunk_feynman          0 B (virtual 323.7 MB)

один я хочу удалить список, а именно «обучение / веб-приложение», но произошла ошибка

sts@Yudi:~/docker$ sudo docker rmi training/webapp
Error response from daemon: conflict: unable to remove repository reference "training/webapp" (must force) - container 0bd2b54678c7 is using its referenced image 54bb4e8718e8
Error: failed to remove images: [training/webapp]

Работает ли контейнер в изображениях?

Пожалуйста помоги


иногда это случается со мной, но я не могу понять, как это происходит (поскольку это не всегда происходит со мной), плюс, если я принудительно удаляю изображение, оно также удаляет кучу других вещей. Знаете ли вы, что вызвало ошибку для вас? Вы можете воспроизвести это?
Чарли Паркер

Отличная недавняя сводка Как удалить образы, контейнеры и тома Docker из Melissa Anderson Dec 2017, с примерами фильтров, шаблонами и т. Д.
Webel IT Australia - upvoter

Ответы:


125

Существует разница между образами Docker и контейнерами Docker. Проверьте этот вопрос .

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

docker ps -a               # Lists containers (and tells you which images they are spun from)
docker images              # Lists images  
docker rm <container_id>   # Removes a container

docker rmi <image_id>      # Removes an image 
                           # Will fail if there is a running instance of that image i.e. container

docker rmi -f <image_id>   # Forces removal of image even if it is referenced in multiple repositories, 
                           # i.e. same image id given multiple names/tags 
                           # Will still fail if there is a docker container referencing image

Обновление для Docker 1.13+ [с января 2017 года]

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

По сути, вышеприведенные команды также могут быть переписаны, более четко, как:

docker container ls -a
docker image ls
docker container rm <container_id>
docker image rm <image_id>

Также, если вы хотите удалить ВСЕ, вы можете использовать:

docker system prune -a

ПРЕДУПРЕЖДЕНИЕ! Это удалит:

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

3
В итоге мне пришлось использовать docker rmi -f id«форсирование» удаления.
WernerCD

@WernerCD -fпомогает, когда вы хотите удалить изображение, на которое есть ссылки в нескольких репозиториях, что является еще одной распространенной причиной сбоя при удалении изображения.
Ахмад

1
Стоит отметить, что docker container lsтолько списки запущенных контейнеров. Это мешало мне, пока я не понял, что добавление -aфлага перечисляет все из них.
MFB

@MFB Хороший вопрос. Добавлен флаг в команду для поддержания паритета между двумя наборами команд. Спасибо!
Ахмад Абдельхани

все еще работает на OSX Docker Desktop v2.2.0.4 (движок 19.03.8)
rrrrrraul

83

Сначала удалите имена контейнеров

$ sudo docker rm backstabbing_ritchie

Результат

$ sudo docker rm backstabbing_ritchie
  backstabbing_ritchie

удалить вторую часть, которая указана на контейнере, который нужно удалить

$ sudo docker rm drunk_feynman 
  drunk_feynman

Во-вторых, удалить контейнер

$ sudo docker rmi training/webapp

Результат

$ sudo docker rmi training/webapp  
  Untagged: training/webapp:latest
  Deleted: 54bb4e8718e8600d78a5d7c62208c2f13c8caf0e4fe73d2bc0e474e93659c0b5
  Deleted: f74dd040041eb4c032d3025fe38ea85de8075992bdce6789b694a44b20feb8de
  Deleted: 7cbae69141977b99c44dc6957b032ad50c1379124d62b7d7d05ab7329b42348e
  Deleted: abb991a4ed5e4cde2d9964aec4cccbe0015ba9cc9838b696e7a32e1ddf4a49bd
  Deleted: 1952e3bf3d7e8e6a9b1e23bd4142e3c42ff7f4b7925122189704323593fd54ac
  Deleted: f95ebd363bf27a7546deced7a41a4099334e37a3d2901fa3817e62bb1ade183f
  Deleted: 20dd0c75901396d41a7b64d551ff04952084cc3947e66c67bae35759c80da338
  Deleted: 2505b734adda3720799dde5004302f5edb3f2a2ff71438f6488b530b728ba666
  Deleted: 2ee0b8f351f753f78f1178000ae37616eb5bf241d4ef041b612d58e1fd2aefdc
  Deleted: 2ce633e3e9c9bd9e8fe7ade5984d7656ec3fc3994f05a97d5490190ef95bce8d
  Deleted: 98b15185dba7f85308eb0e21196956bba653cf142b36dc08059b3468a01bf35d
  Deleted: 515565c29c940355ec886c992231c6019a6cffa17ff1d2abdfc844867c9080c5
  Deleted: 2880a3395eded9b748c94d27767e1e202f8d7cb06f1e40e18d1b1c77687aef77

Проверьте континент

  $ sudo docker ps -as
  CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
  78479ffeba5c        ubuntu              "/bin/bash"         43 hours ago        Exited (0) 43 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)

6
Если у вас много старых контейнеров, вы можете также использовать Docker rm `docker ps -aq`для очистки, а не удалять их по одному. Больше информации здесь
Philiiiiiipp

Почему необходимо удалить имя перед удалением изображения? Почему попытка удаления изображения без предварительного удаления имени может быть проблемой?
code_dredd

@code_dredd Нет такой вещи как "удаление имен". Это контейнер, который необходимо удалить перед удалением изображения. Более подробная информация на stackoverflow.com/a/40283776/1998422
Ахмад Абдельхани

37

Если вы хотите очистить докер изображения и контейнеры

ВНИМАНИЕ: это очистит все

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

docker stop $(docker ps -a -q)

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

docker rm $(docker ps -a -q)

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

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

Это сработало. Кроме того, если вы остановите контейнер, вы все равно увидите его в списке. Поэтому вы должны удалить его с помощью docker rm $(docker ps -a -q). Спасибо!

28

Вы можете использовать -fопцию, чтобы принудительно удалить контейнеры.

sudo docker rmi -f training/webapp

Вы можете остановить использование контейнеров sudo docker stop training/webappперед удалением


1
Я попробовал это, остановив контейнер $ sudo docker stop training / webapp Ошибка ответа от демона: нет такого id: training / webapp Ошибка: не удалось остановить контейнеры: [training / webapp]
Yuday

Вы можете попробовать остановиться с идентификатором контейнера sudo docker stop 0bd2b54678c7
Сарил Судхакаран

23

Если у вас запущено несколько Docker-контейнеров, используйте это

$ docker rm $(docker ps -aq)

Он удалит все текущие докеры, перечисленные в команде «ps -aq».

Источник: aaam на https://github.com/docker/docker/issues/12487


Это сработало для меня. После того, как я выполнил эту команду, я должен был запустить docker image lsи затем, docker image rm Xгде каждый X был получен из lsвыходных данных.
Jftuga

5

Заметил, что это вопрос 2-х лет, но я все же хочу поделиться своим обходным путем для этого конкретного вопроса: во-

первых, запустите, docker container ls -aчтобы просмотреть все имеющиеся у вас контейнеры и точно определить, что вы хотите удалить.

Во-вторых, удалите команду с командой docker container rm <CONTAINER ID>(если контейнер в данный момент запущен, вы должны сначала остановить его, запустить, docker container stop <CONTAINER ID>чтобы корректно остановить указанный контейнер, если он не останавливает его по какой-либо причине, в противном случае вы можете запустить docker container kill <CONTAINER ID> to force shutdown of the specified container).

В-третьих, удалите контейнер, запустив docker container rm <CONTAINER ID>.

Наконец, вы можете запустить, docker image ls -aчтобы просмотреть все изображения и удалить то, что вы хотите, запустив docker image rm <hash>.


2

Удалить изображения докера>

Список всех контейнеров

docker container ls

Список всех изображений

docker image ls

Остановить контейнер по идентификатору контейнера

docker container stop <container_id>

Удалить контейнер по идентификатору контейнера

docker container rm <container_id>

Если не хотите останавливаться и удалять, можете заставить удалить

docker container rm -f <container_id>

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

docker image rm <image_id>

Готово!


2

перечислите все ваши изображения докера:

docker images

Перечислите все существующие контейнеры Docker:

docker ps -a

удалить все целевые контейнеры, используя изображение, которое вы хотите удалить:

docker rm <container-id>

удалить целевое изображение:

docker rmi <image-name:image-tag or image-id>

0

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

docker ps -a | grep training/webapp | cut -d ' ' -f 1 | xargs docker rm
  • ps -a: список всех контейнеров
  • grep training / webapp: отфильтруйте все, кроме контейнеров, запущенных из образа training / webapp
  • cut -d '' -f 1: перечислить только идентификаторы контейнера (первое поле, разделенное пробелом)
  • xargs docker rm: отправить вывод списка идентификаторов контейнеров в команду docker rm, чтобы удалить контейнер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.