Quero excluir todas as versões de imagens do docker com nomes que contêm uma determinada string ( imagename
).
Eu tentei o seguinte, mas não parece funcionar:
docker images | grep 'imagename' | xargs -I {} docker rmi
Experimente o seguinte:
docker rmi $(docker images |grep 'imagename')
Windows PowerShell:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
docker images |grep 'imagename'
Versão um pouco mais exata - grepping apenas no nome do repositório:
fonte
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
fonte
docker images --format '{{.Repository}}:{{.Tag}}
filtra a saída para que apenas repo e tag sejam mostrados (ou sejafoo:latest
).grep 'imagename
filtra essas linhas apenas para as imagens que contêmimagename
. Colocar isso$()
avalia e passa para o exterior,docker rmi
que remove as imagens que foram correspondidas.docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker images
na verdade, usa o primeiro argumento posicional como um nome de imagem para filtrar. Não são necessários grep e awk. A-q
opção retornará apenas os IDs de imagens correspondentes que podem ser alimentadosdocker rmi
.O
uniq
é necessário para remover duplicatas, caso você tenha a mesma imagem com tags diferentes.fonte
Simplesmente você pode adicionar
--force
no final do comando. Gostar:sudo docker rmi <docker_image_id> --force
Para torná-lo mais inteligente, você pode interromper qualquer contêiner em execução antes de remover a imagem:
Em
docker ps
, $ 1 é a primeira coluna, ou seja, o id do contêiner do docker e $ 3 é a terceira coluna, ou seja, o id da imagem do dockerfonte
Acho minha resposta mais simples.
Exemplo, o nome da sua imagem é
python_image
.Então, seu código deve ser :
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
Eu espero que isso ajude.
fonte
Para mim funcionou ( Docker versão 19.03.5 ):
O comando " docker images 'imagename' -q " irá listar todos os id de imagens do argumento entre aspas simples, então concatená-lo com docker rmi (ou docker rmi -f para forçar) ele removerá todas as imagens com o nome selecionado
fonte
Também recebi outra resposta concisa. A única mudança foi remover o
-I {}
sinalizador desnecessário .docker images | grep 'imagename' | xargs docker rmi
fonte
Isso removerá todas as imagens com o nome "imageName". Em alguns casos, pode ocorrer um erro como "a imagem é referenciada em um ou mais repositórios". Nesse caso, use forçar exclusão.
Outra forma pode ser:
fonte
Por algum motivo, não consegui usar nenhuma das respostas fornecidas aqui. Aqui está o que funcionou para mim.
docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi
awk '{print $3}'
é uma parte importante. Ele extrai o id da 3ª coluna.fonte
fonte
docker rmi $(docker images --filter=reference="IMAGENAME:TAG")
por exemplo, se eu tiver as seguintes imagens
Em seguida
docker rmi $(docker images --filter=reference="abcd*:*4.0")
, removerá as primeiras quatro imagens.Mais informações, consulte https://docs.docker.com/engine/reference/commandline/images/
fonte
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
Observação secundária: pelo que estamos experimentando, parece que você - desde o docker 18.03 - não é mais capaz de remover imagens não marcadas com base apenas no nome. Você precisa usar o nome + tag conforme indicado acima ou usar o ID.
fonte
Montei uma solução para essa questão para atender às minhas necessidades, que não foi postada anteriormente.
Eu queria combinar imagens construídas localmente:
library/myapp
que eu tenha renomeado, etiquetado, e empurrou a um repo privado:myrepo.org/library/myapp
. Depois que eles forem pressionados, quero limpar o docker reg local.E não me importo se nada for encontrado ou se o comando gerar um erro. Assim, adicionado
|| true
no final para inclusão nos scripts.fonte
Com base na resposta de @Aditya, você também pode criar uma função bash para remover imagens facilmente. Coloque esta função em seu
~/.profile
. Crie uma nova sessão de shell ou fonte porsource ~/.profile
.Uso:
fonte
Informativo:
Dê este erro:
Provavelmente porque minhas imagens se parecem com isto:
Tive que usar o id da imagem e fazer este comando:
Para remover contêineres de saída:
fonte
Com base na minha resposta preferida, mas com uma variável:
E isso pode ser usado em um pipeline do Jenkins:
Preferi esta opção em vez de remover por meio da tag:
Isso porque, como dizem os documentos e eu verifiquei, "usar este comando com a tag como parâmetro apenas remove a tag. Se a tag for única para a imagem, tanto a imagem quanto a tag são removidas."
fonte
Experimente isto:
fonte