Estou tentando remover uma imagem e recebo:
# 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
Esta é a versão docker:
# 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
mas não há informações extras:
# 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
Como posso obter as imagens de crianças dependentes que afirma ter?
não há contêineres em execução ou interrompidos com esse id de imagem.
linux
docker
containers
Nicocesar
fonte
fonte
Respostas:
Resposta curta: Aqui está um script python3 que lista as imagens dependentes do docker.
Resposta longa: você pode ver o id da imagem e o id pai de todas as imagens criadas após a imagem em questão com o seguinte:
Você deve ser capaz de procurar imagens com id pai começando com f50f9524513f, então procurar imagens filhas dessas , etc. Mas
.Parent
não é o que você pensa. , então, na maioria dos casos, você precisaria especificardocker images --all
acima para fazer isso funcionar, então você obterá ids de imagem para todas as camadas intermediárias também.Aqui está um script python3 mais limitado para analisar a saída do docker e fazer a pesquisa para gerar a lista de imagens:
Se você salvá-
desc.py
lo, poderá invocá-lo da seguinte maneira:Ou apenas use a essência acima , que faz a mesma coisa.
fonte
Se você não tem um grande número de imagens, há sempre a abordagem da força bruta:
fonte
echo $1
para o mais feio (mas ainda brute-forcy)docker images | grep $i
(mais portátil nas versões docker do que usando--filter
sinalizadores para o Id da imagem)Instale o dockviz e siga as ramificações do id da imagem na visualização em árvore:
fonte
sudo apt-get update ; sudo apt-get install golang-go; export GOPATH=$HOME/.go
primeiro.brew install dockviz
Eu criei uma essência com script de shell para imprimir a árvore descendente de uma imagem do docker, caso alguém esteja interessado na solução bash:
fonte
Isso é o que eu fiz a fim de preservar minha "imagem" final (camada, na verdade - que é o que me confundiu, já que estou entrando nas versões docker).
Eu estava recebendo toda a mensagem "... não pode ser forçado ...". Percebi que não poderia excluir as imagens de que não precisava, porque elas não são imagens realmente independentes criadas pelo 'docker commit'. Meu problema era que eu tinha várias imagens (ou camadas) entre a imagem de base e a minha final e, apenas tentando limpar, encontrei o erro / aviso sobre a criança e os pais.
docker image load -i FinalImage.tar.gz
. O resultado foi algo como:ID da imagem carregada: sha256: 82d4f8ef9ea1eab72d989455728762ed3c0fe35fd85acf9edc47b41dacfd6382
Agora, quando listo com 'docker image ls', só tenho a imagem base original e a imagem final que salvei anteriormente em um tarball.
Meu sistema está 'limpo' agora. Só tenho as imagens que quero. Até apaguei a imagem base sem problemas.
fonte
Com base nas respostas slushy e Michael Hoffman , se você não tiver uma tonelada de imagens, pode usar esta função shell:
e então chamá-lo usando
fonte
Esta é uma solução baseada na API Python (
pip install docker
) que lista os descendentes recursivamente junto com suas tags (se houver), aumentando o recuo de acordo com a profundidade do relacionamento (filhos, netos, etc.):Exemplo:
Eu o disponibilizei como uma essência em https://gist.github.com/simleo/10ad923f9d8a2fa410f7ec2d7e96ad57
fonte
Esta é uma maneira simples de obter uma lista de imagens filhas que dependem de uma imagem pai:
Isso irá gerar uma lista de IDs de imagens filho / pai, por exemplo (truncada para concisão):
O lado esquerdo é o ID da imagem filha, o lado direito é o ID da imagem pai que estamos tentando excluir, mas está dizendo "a imagem tem imagens filho dependentes". Isso nos diz que
abcdefghijkl
é a criança que depende123456789012
. Então, precisamos primeirodocker rmi abcdefghijkl
, então você podedocker rmi 123456789012
.Agora, pode haver uma cadeia de imagens de filhos dependentes, então você pode ter que repetir para encontrar o último filho.
fonte
Você pode excluir imagens do Docker independentemente da relação pai e filho através do diretório abaixo do Docker
Nesse diretório, você pode encontrar imagens Docker, para que possa excluir o que deseja.
fonte
/var/lib/docker
diretamente manualmenteE se:
Ele vai imprimir os ids da imagem filha, com o
sha256:
prefixo.Eu também tinha o seguinte, que acrescenta os nomes:
ID=
Obtém o id completo da imagemIMAGES=
Obtém todas as imagens secundárias que possuem esta imagem listada como umImage
echo...
Remove duplicatas e ecoa os resultadosfonte
Eu preparei isso para encontrar recursivamente os filhos, suas tags de repositório e imprimir o que eles estão fazendo:
Não se esqueça de deletar / tmp / dii- * se seu host não for seguro.
fonte
Eu também estava enfrentando o mesmo problema. Siga as etapas abaixo para resolver o problema.
Pare todos os contêineres em execução
docker stop $ (docker ps -aq) Remova todos os contêineres
docker rm $ (docker ps -aq) Remover todas as imagens
docker rmi $ (docker imagens -q)
fonte