Docker como alterar o nome do repositório ou renomear a imagem?

569

Estou tentando alterar o nome do repositório da imagem:

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
server              latest              d583c3ac45fd        26 minutes ago      685.5 MB

Por isso, quero mudar o nome serverpara algo como myname/server:

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
myname/server       latest              d583c3ac45fd        26 minutes ago      685.5 MB

Como posso fazer isso?

Timur Fayzrakhmanov
fonte
5
qual é a diferença entre REPOSITORY e TAG?
Charlie Parker
@CharlieParker TAG é normalmente usado para a versão do repositório-por exemplo, MariaDB repositório com etiqueta 10.1
Ian Hunter
Siga a sintaxe da tag docker --help cmd abaixo:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
anandchaugule
Gostaria de mudar o nome completo do repositório no dockerhub .. pena que não é possível :(
danger89

Respostas:

1035
docker image tag server:latest myname/server:latest

ou

docker image tag d583c3ac45fd myname/server:latest

Tags são apenas aliases legíveis por humanos para o nome completo da imagem ( d583c3ac45fd...).

Assim, você pode ter quantos deles associados à mesma imagem que desejar. Se você não gostar do nome antigo, poderá removê-lo depois de o ter marcado novamente:

docker rmi server

Isso apenas removerá o alias/tag. Como d583c3ac45fdpossui outros nomes, a imagem real não será excluída.

Andy
fonte
isso não funciona para mim. Quando executo a tag docker myname / server: o docker mais recente considera adequado anexar docker.io, portanto a tag da imagem acaba sendo docker.io/myname/server:latest.
Scott Scott
Qual é a sua versão do SO e do Docker host? Eu suspeito que algo sobre a instalação do Docker está modificando a instrução de tag.
Andy
25
Também acho que omitir :latesté bom se houver apenas uma tag para o nome da imagem em jogo. Mas é bastante idiossincrático que o nome da imagem seja chamado de REPOSITORY(e não uma imagem) na saída docker imagesenquanto ele precisa ser renomeado com um comando chamado tagconsiderando que TAGé uma coluna separada nessa saída. Espero que limpar essa e outras coisas afins ...
matanster
Observe que você provavelmente deseja docker image tag from_server:version to_server:versiono descrito aqui: docs.docker.com/engine/reference/commandline/image_tag
Traveler
20

Como abreviação, você pode executar:

docker tag d58 myname/server:latest

Onde d58representa os três primeiros caracteres do IMAGE ID, nesse caso, é tudo o que você precisa.

Por fim, você pode remover a imagem antiga da seguinte maneira:

docker rmi server
Mwiza
fonte
1
No meu caso, usar o ID completo de alguma forma acrescenta: o mais recente ao final e gera um erro alegando que não foi possível encontrá-lo. As três primeiras letras funcionam muito melhor. (ou seja, docker tag d583c3ac45fd myname/server:latestnão funciona enquanto docker tag d58 myname/server:latestobras.)
John Hamilton
8

Recentemente, tive que migrar algumas imagens do registro do Docker (docker.mycompany.com) para o Artifactory (docker.artifactory.mycompany.com)

docker pull docker.mycompany.com/something/redis:4.0.10
docker tag docker.mycompany.com/something/redis:4.0.10 docker.artifactory.mycompany.com/something/redis:4.0.10
docker push docker.artifactory.mycompany.com/something/redis:4.0.10
anthavio
fonte
6
docker tag CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME
Huiguorou
fonte
2
Claro, isso vai funcionar, mas você não explicou a essa pessoa o motivo. Eles parecem ser confundido sobre o que um tag Docker é ... Supondo que eles sabiam como usar janela de encaixe -h
Adam Kaplan
1

A resposta aceita é ótima para renomear uma única vez, mas aqui está uma maneira de renomear várias imagens que possuem o mesmo repositório de uma só vez (e remover as imagens antigas).

Se você tiver imagens antigas do formulário:

$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
old_name/image_name_1    latest              abcdefghijk1        5 minutes ago      1.00GB
old_name/image_name_2    latest              abcdefghijk2        5 minutes ago      1.00GB

E você quer:

new_name/image_name_1
new_name/image_name_2

Então você pode usar este (subbing em OLD_REPONAME, NEW_REPONAMEe, TAGconforme o caso):

OLD_REPONAME='old_name'
NEW_REPONAME='new_name'
TAG='latest'

# extract image name, e.g. "old_name/image_name_1"
for image in $(docker images | awk '{ if( FNR>1 ) { print $1 } }' | grep $OLD_REPONAME)
do \
  OLD_NAME="${image}:${TAG}" && \
  NEW_NAME="${NEW_REPONAME}${image:${#OLD_REPONAME}:${#image}}:${TAG}" && \
  docker image tag $OLD_NAME $NEW_NAME && \
  docker rmi $image:${TAG}  # omit this line if you want to keep the old image
done

ascendentes
fonte
0

Para renomear uma imagem, dê uma nova tag e remova a tag antiga usando o comando 'rmi':

$ docker tag $ docker rmi

Este segundo passo é assustador, pois 'rmi' significa "remover imagem". No entanto, a janela de encaixe não removerá a imagem se tiver outras tags. Ou seja, se você seguir imediatamente isso com: docker rmi, removerá a imagem (assumindo que não há outras tags atribuídas à imagem)

Jasmeet Singh
fonte
-7

janela de encaixe run -it --name NEW_NAME Existing_name

Para alterar o nome da imagem existente.

Jay Patel
fonte
6
Isso cria um contêiner com o novo nome. Nada acontece com o nome da imagem .
Jwodder #