Я пытаюсь удалить изображение и получаю:
# docker rmi f50f9524513f
Failed to remove image (f50f9524513f): Error response from daemon: conflict: unable to delete f50f9524513f (cannot be forced) - image has dependent child images
Это версия докера:
# docker version
Client:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 21:49:11 2016
OS/Arch: linux/amd64
Server:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 21:49:11 2016
OS/Arch: linux/amd64
но дополнительной информации нет:
# docker images --format="raw" | grep f50f9524513f -C3
repository: debian
tag: 8
image_id: f50f9524513f
created_at: 2016-03-01 18:51:14 +0000 UTC
virtual_size: 125.1 MB
repository: debian
tag: jessie
image_id: f50f9524513f
created_at: 2016-03-01 18:51:14 +0000 UTC
virtual_size: 125.1 MB
Как я могу получить зависимые дочерние изображения, которые он утверждает?
нет ни запущенных, ни остановленных контейнеров с этим идентификатором изображения.
linux
docker
containers
nicocesar
источник
источник
Ответы:
Краткий ответ: вот скрипт python3, в котором перечислены зависимые образы докеров .
Длинный ответ: вы можете увидеть идентификатор изображения и родительский идентификатор для всего изображения, созданного после рассматриваемого изображения, со следующим:
Вы должны иметь возможность искать изображения с родительским идентификатором, начинающимся с f50f9524513f, а затем искать их дочерние изображения и т. Д. Но
.Parent
это не то, что вы думаете. , поэтому в большинстве случаев вам нужно будет указатьdocker images --all
выше, чтобы это работало, тогда вы также получите идентификаторы изображений для всех промежуточных слоев.Вот более ограниченный скрипт python3 для анализа вывода докера и выполнения поиска для создания списка изображений:
Если вы сохраните это,
desc.py
вы можете вызвать его следующим образом:Или просто используйте суть выше , которая делает то же самое.
источник
Если у вас нет большого количества изображений, всегда есть подход грубой силы:
источник
echo $1
более уродливый (но все же грубый)docker images | grep $i
(более переносимый в версиях докеров, чем использование--filter
флагов для идентификатора изображения)Установите dockviz и следуйте веткам идентификатора изображения в дереве:
источник
sudo apt-get update ; sudo apt-get install golang-go; export GOPATH=$HOME/.go
сначала.brew install dockviz
Я создал суть со сценарием оболочки для распечатки дерева потомков образа докера, если кого-то заинтересует решение bash:
источник
Это то, что я сделал, чтобы сохранить свое окончательное «изображение» (на самом деле, слой - это то, что меня сбило с толку, поскольку я только начинаю заниматься сборками докеров).
Я получал все сообщение «... нельзя принудительно ...». Я понял, что не могу удалить изображения, которые мне не нужны, потому что они не являются действительно независимыми изображениями, созданными с помощью «фиксации докеров». Моя проблема заключалась в том, что у меня было несколько изображений (или слоев) между базовым изображением и моим последним, и просто пытаясь очистить, я встретил ошибку / предупреждение о дочернем и родительском.
docker image load -i FinalImage.tar.gz
. Результат был примерно таким:ID загруженного изображения: sha256: 82d4f8ef9ea1eab72d989455728762ed3c0fe35fd85acf9edc47b41dacfd6382
Теперь, когда я указываю «docker image ls», у меня есть только исходный базовый образ и последний образ, который я ранее сохранил в архиве.
Моя система теперь «чистая». У меня есть только те изображения, которые мне нужны. Я даже без проблем удалил базовый образ.
источник
Основываясь на ответах Slushy и Майкла Хоффмана , если у вас нет тонны изображений, вы можете использовать эту функцию оболочки:
а затем назовите его, используя
источник
Вот решение, основанное на Python API (
pip install docker
), которое рекурсивно перечисляет потомков вместе с их тегами (если есть), увеличивая отступ в соответствии с глубиной отношения (дети, внуки и т. Д.):Пример:
Я сделал его доступным по адресу https://gist.github.com/simleo/10ad923f9d8a2fa410f7ec2d7e96ad57.
источник
Вот простой способ получить список дочерних изображений, которые зависят от родительского изображения:
Это сгенерирует список идентификаторов дочерних / родительских изображений, например (усеченный для краткости):
Левая часть - это идентификатор дочернего изображения, правая часть - это идентификатор родительского изображения, которое мы пытаемся удалить, но в нем говорится, что «изображение имеет зависимые дочерние изображения». Это говорит нам, что
abcdefghijkl
это ребенок, от которого зависит123456789012
. Так что сначала нам нужноdocker rmi abcdefghijkl
, а потом можноdocker rmi 123456789012
.Теперь может существовать цепочка зависимых дочерних изображений, поэтому вам, возможно, придется повторять, чтобы найти последний дочерний элемент.
источник
Вы можете удалить образы Docker независимо от родительского и дочернего отношения через приведенный ниже каталог Docker.
В этом каталоге вы можете найти образы Docker, так что вы можете удалить все, что хотите.
источник
/var/lib/docker
напрямую вручнуюКак насчет:
Он напечатает идентификаторы дочерних изображений с
sha256:
префиксом.У меня также было следующее, к которому добавляются имена:
ID=
Получает полный идентификатор изображенияIMAGES=
Получает все дочерние изображения, у которых это изображение указано какImage
echo...
Удаляет дубликаты и повторяет результатыисточник
Я приготовил это, чтобы рекурсивно находить детей, их теги репо и распечатывать то, что они делают:
Не забудьте удалить / tmp / dii- *, если ваш хост небезопасен.
источник
Я тоже столкнулся с той же проблемой. Чтобы решить проблему, выполните следующие действия.
Остановить все запущенные контейнеры
docker stop $ (docker ps -aq) Удалить все контейнеры
docker rm $ (docker ps -aq) Удалить все изображения
docker rmi $ (образы докеров -q)
источник