Как удалить изображение в Docker?

Я запускаю Docker под Vagrant под OS X 10.8.4 (Mountain Lion), и всякий раз, когда я пытаюсь удалить сохраненное изображение, я получаю сообщение об ошибке:

$ docker rmi some-image-id
2013/07/15 hh:mm:ss unexpected JSON input

В соответствии с помощью справки rmi правильный синтаксис docker rmi IMAGE [IMAGE...], и я не уверен, что с этим делать.

Как удалить изображение?

$ docker version
Client version: 0.4.8
Server version: 0.4.8
Go version: go1.1

$docker info
Containers: 1
Images: 3

Интересно, что когда я запускаю docker ps, никаких контейнеров вообще не появляется. Запуск docker images показывает четыре (4) base изображения и одно (1) node изображение.

Ответ 1

Попробуйте docker rmi node. Это должно сработать.

Увидеть все созданные контейнеры так же просто, как docker ps -a.

Чтобы удалить все существующие контейнеры (а не изображения!), запустите docker rm $(docker ps -aq)

Ответ 2

Ниже перечислены некоторые способы удаления изображений/контейнеров докеров:

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

docker rmi image_name:version/image-id

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

docker rmi $(docker images -qf "dangling=true")

Убейте контейнеры и удалите их:

docker rm $(docker kill $(docker ps -aq))

Примечание: Замените kill на stop для изящного выключения

Удалите все изображения, кроме "my-image"

Используйте grep для удаления всех, кроме my-image и ubuntu

docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})

Или (без awk)

docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))

Ответ 3

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

docker rm $(docker ps -a -q)

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

docker rmi $(docker images -q)

Ответ 4

Чтобы удалить изображение из Docker, используя идентификатор изображения:

  1. Получить список всех изображений

    docker images
    
  2. Определите идентификатор изображения, которое вы хотите удалить, например:

    REPOSITORY     TAG     IMAGE ID        CREATED        VIRTUAL SIZE
    kweku360/java  latest  08d3a9b8e166    2 weeks ago         5.733 GB'
    
  3. Наконец, удалите изображение, используя идентификатор изображения (требуются только первые три цифры)

    docker rmi 08d
    

Ответ 5

Образ:

  1. Список изображений

    докер изображения

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

    Докер rmi image_name

  3. Принудительно удалить одно изображение

    Докер rmi -f image_name

Контейнер:

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

    докер ps -a

  2. Удалить один контейнер

    docker rm container_id

  3. Принудительно удалить один контейнер

    docker rm -f container_id

Ответ 6

Обновление, как прокомментировал VonC в Как удалить старые контейнеры Docker.

С Docker 1.13 (4 квартал 2016 года) у вас теперь есть:

docker system prune удаления удалит ВСЕ неиспользуемые данные (т.е. по порядку: контейнеры остановлены, тома без контейнеров и изображения без контейнеров).

См. PR 26108 и commit 86de7c0, в которых представлены несколько новых команд, помогающих упростить визуализацию занимаемого диском данных демона Docker и легко очистить "ненужный" избыток.

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

Ответ 7

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

  1. Чтобы удалить конкретный контейнер

    docker rm CONTAINER_ID CONTAINER_ID
    
    • Для одного изображения

      docker rm  70c0e19168cf
      
    • Для нескольких изображений

      docker rm  70c0e19168cf c2ce80b62174
      
  2. Удалить вышедшие контейнеры

    docker ps -a -f status=exited
    
  3. Удалить все контейнеры

    docker ps -q -a | xargs docker rm
    


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

docker rmi IMAGE_ID
  1. Удалить определенные изображения

    • для одного изображения

      docker rmi ubuntu
      
    • для нескольких изображений

      docker rmi ubuntu alpine
      
  2. Удалить оборванные изображения
    Висячие изображения - это слои, которые не имеют отношения к каким-либо помеченным изображениям, поскольку изображения Docker состоят из нескольких изображений.

    docker rmi -f $(docker images -f dangling=true -q)
    
  3. Удалить все изображения Docker

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

Удаление томов

Чтобы docker volume ls список томов, запустите docker volume ls

  1. Удалить определенный том

    docker volume rm VOLUME_NAME
    
  2. Удалить висячие тома

    docker volume rm $(docker volume ls -f dangling=true -q)
    
  3. Удалить контейнер и его объемы

    docker rm -v CONTAINER_NAME
    

Ответ 8

docker rm container_name

docker rmi image_name

docker help

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

rmi Удалите одно или несколько изображений

Ответ 9

docker rmi  91c95931e552

Ответ об ошибке от демона: Конфликт, невозможно удалить 91c95931e552, потому что его использует контейнер 76068d66b290, используйте -f для принудительного использования FATA [0000] Ошибка: не удалось удалить одно или несколько изображений

Найти идентификатор контейнера,

# docker ps -a

# docker rm  daf644660736 

Ответ 10

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

Итак, для этого сначала

  • docker stop container-id - Чтобы остановить работающий контейнер
  • docker rm container-id - удалить/удалить контейнер

затем,

  • docker rmi image-id - удалить/удалить изображение

Ответ 11

Для версий 1.13 и выше:

docker image rm [OPTIONS] IMAGE [IMAGE...]

Сравнение:

[OPTIONS], похоже, не имеет разницы.

--force , -f        Force removal of the image
--no-prune          Do not delete untagged parents

От: Представляем Docker 1.13

Изменена CLI

В Docker 1.13 мы перегруппировали каждую команду, чтобы сидеть под логическим объектом, с которым он взаимодействует. Например, list и start контейнеров теперь являются подкомандами docker container и history являются подкомандой docker image.

Эти изменения позволяют нам очистить синтаксис CLI Docker, улучшить текст справки и упростить использование Docker. Старый синтаксис команд по-прежнему поддерживается, но мы призываем всех принять новый синтаксис.

Ответ 12

Docker предоставляет некоторые команды для удаления images.

Показать/Удалить Images:

docker images
docker images -a # All images
docker images --no-trunc # List the full length image IDs

docker images --filter "dangling=true" // Show unstage images
docker rmi $(docker images -f "dangling=true" -q) # Remove on unstages images

docker rmi <REPOSITORY> or <Image ID> # Remove a single image

docker image prune # Interactively remove dangling images
docker image prune -a # Remove all images

or 

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

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

Пример:

$docker images --filter "before=<hello-world>" // It will all images before hello-world

$docker images --filter "since=<hello-world>" // It will all images since hello-world

Таким образом, вы можете удалить этот фильтр изображения следующим образом:

docker rmi $(docker images --filter "since=<hello-world>")
docker rmi $(docker images --filter "before=<hello-world>")

Ответ 13

Здесь оболочка script для удаления помеченного (именованного) изображения и контейнеров. Сохранить как docker-rmi и запустить с помощью 'docker-rmi my-image-name'

#!/bin/bash

IMAGE=$1

if [ "$IMAGE" == "" ] ; then
  echo "Missing image argument"
  exit 2
fi

docker ps -qa -f "ancestor=$IMAGE" | xargs docker rm
docker rmi $IMAGE

Ответ 14

Если вы хотите автоматически/периодически очищать покинутые контейнеры и удалять изображения и тома, которые не используются запущенным контейнером, вы можете загрузить образ meltwater/docker-cleanup.

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

Просто беги:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

Он будет запускаться каждые 30 минут (или сколько бы вы ни установили его с помощью опции DELAY_TIME = 1800) и очищать вышедшие контейнеры и изображения.

Более подробная информация: https://github.com/meltwater/docker-cleanup/blob/master/README.md

Ответ 15

Удалите все из них, используя

Шаг 1: Убейте все контейнеры

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker kill $i ; done

Шаг 2: сначала RM сначала

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker rm $i ; done

Шаг 3: Удалите изображения с помощью силы

for i in `sudo docker images | awk '{ print $3}'`; do  sudo docker rmi --force $i ; done

Используйте шаг 1, если вы получаете сообщение об ошибке, которое невозможно удалить из-за дочерних зависимостей

Ответ 16

Я предполагаю, что контейнер, использующий изображение, уже запущен. Вы можете попробовать использовать принудительный тег docker rmi --force [IMAGE]

Обратите внимание, что тогда у вас будет "свисающий контейнер" - контейнер без родительского изображения.

"Правильный" способ сделать это - сначала удалить контейнер. Если он работает, нет необходимости останавливать его в первую очередь, просто принудительно docker rm -f [CONTAINER] контейнер, а также docker rm -f [CONTAINER]

Ответ 17

Для меня работала нормально:

> docker images
REPOSITORY   TAG           IMAGE ID          CREATED             SIZE
debian       jessie        86baf4e8cde9      3 weeks ago         123MB
ubuntu       yakkety       7d3f705d307c      3 weeks ago         107MB
alpine       3.5           074d602a59d7      7 weeks ago         3.99MB

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

> docker rmi debian:jessie
> docker rmi ubuntu:yakkety
> docker rmi alipine:3.5

Ответ 18

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

[email protected]:~$ sudo docker images

СКЛАД TAG IMAGE ID СОЗДАНО РАЗМЕР 88282f8eda00 19 секунд назад 308,5 Мб 13e5d3d682f4 19 часов назад 663 MB busybox2 последних 05fe66bb1144 20 часов назад 1,129 Мб Ubuntu 16,04 00fd29ccc6f1 5 дней назад 110,5 Мб убунта 14.04 67759a80360c 5 дней назад 221,4 MB питон 2.7 9e92c8430ba0 7 дней назад 680,7 MB busybox последние 6ad733544a63 6 недель назад 1.129 MB ubuntu 16.10 7d3f705d307c 5 месяцев назад 106.7 MB

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

[email protected]:~$ sudo docker rmi 88282f8eda00

Удалено: sha256: 88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194 Удалено: sha256: 4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9 Удалено: sha256: 8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8 Удалено: sha256: b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43

[email protected]:~$ sudo docker rmi 13e5d3d682f4

Ошибка от демона: конфликт: невозможно удалить 13e5d3d682f4 (необходимо принудительно) - изображение используется остановленным контейнером 5593e25eb638

Удалить силой:

[email protected]:~$ sudo docker rmi -f 13e5d3d682f4

Удалено: sha256: 13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e Исключено: sha256: 3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378 Исключено: sha256: 5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af Исключено: sha256: 18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf

Ответ 19

В моем случае проблема в том, что у меня есть буксируемые изображения с тем же именем решение заключается в добавлении тега после имени или идентификатора

sudo docker rmi <NAME>:<TAG>

например:

sudo docker rmi php:7.0.4-fpm