Conteúdo

Tutorial de docker push: envie imagens para um Registry (--all-tags, docker login)

docker push envia imagens para um Registry. Em geral, primeiro use docker tag para definir o nome de destino. Veja Docker Hub para saber como usá-lo.

Sintaxe

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker push [OPTIONS] NAME[:TAG]
docker login [OPTIONS] [SERVER]

Parâmetros

ParâmetroDescrição
-a, --all-tagsEnvia todas as tags da imagem
--platform stringEnvia o manifest da plataforma especificada como uma imagem de plataforma única; não envia o image index, portanto outros manifests (incluindo attestations) não serão preservados. O formato é os[/arch[/variant]], por exemplo, linux/amd64
-q, --quietOculta a saída detalhada
-p, --password stringSenha ou Personal Access Token (PAT); use - para ler de stdin
--password-stdinLê a senha ou o Personal Access Token (PAT) de stdin
-u, --username stringNome de usuário

Se você não especificar um servidor em docker login, o Docker Hub será usado por padrão. O formato do nome de destino de docker tag é TARGET_IMAGE[:TAG].

Exemplo

O exemplo a seguir usa o Registry local localhost:5000 e marca alpine:3.23 no Repository tools/alpine.

Criar tags de destino

$ docker tag alpine:3.23 localhost:5000/tools/alpine:3.23

$ docker tag alpine:3.23 localhost:5000/tools/alpine:latest

$ docker images localhost:5000/tools/alpine
IMAGE                                ID             DISK USAGE   CONTENT SIZE   EXTRA
localhost:5000/tools/alpine:3.23     ff7f0c727dd7       26.6MB         8.21MB        
localhost:5000/tools/alpine:latest   ff7f0c727dd7       26.6MB         8.21MB        
  • As duas tags apontam para o mesmo ID de imagem.
  • O nome de destino inclui o host e a porta do Registry, o Repository e cada tag.

Enviar uma tag e todas as tags

$ docker push localhost:5000/tools/alpine:3.23
The push refers to repository [localhost:5000/tools/alpine]
5e9b4a97f639: Unavailable
5e9b4a97f639: Pushed
3.23: digest: sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306 size: 1022

 Info -> Not all multiplatform-content is present and only the available single-platform image was pushed
         sha256:ff7f0c727dd796aa36787bfcd9a64bf35a6ce72a73451b3359fde849b6703d63 -> sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306

$ docker push localhost:5000/tools/alpine:latest
The push refers to repository [localhost:5000/tools/alpine]
5e9b4a97f639: Layer already exists
latest: digest: sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306 size: 1022

 Info -> Not all multiplatform-content is present and only the available single-platform image was pushed
         sha256:ff7f0c727dd796aa36787bfcd9a64bf35a6ce72a73451b3359fde849b6703d63 -> sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306

$ docker push --all-tags localhost:5000/tools/alpine
The push refers to repository [localhost:5000/tools/alpine]
5e9b4a97f639: Layer already exists
3.23: digest: sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306 size: 1022
5e9b4a97f639: Layer already exists
latest: digest: sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306 size: 1022

 Info -> Not all multiplatform-content is present and only the available single-platform image was pushed
         sha256:ff7f0c727dd796aa36787bfcd9a64bf35a6ce72a73451b3359fde849b6703d63 -> sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306

 Info -> Not all multiplatform-content is present and only the available single-platform image was pushed
         sha256:ff7f0c727dd796aa36787bfcd9a64bf35a6ce72a73451b3359fde849b6703d63 -> sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306
  • O envio de uma única tag informa o digest. Ao enviar a mesma camada novamente, aparece Layer already exists.
  • --all-tags envia 3.23 e latest de tools/alpine de uma só vez.
  • Aviso Info: alpine:3.23 é uma imagem multiplataforma, mas apenas parte do conteúdo de plataformas está disponível localmente. Por isso, somente a plataforma única disponível no momento foi enviada (o digest mudou de ff7f0c… para 3d6794…, o da plataforma única). O envio foi bem-sucedido, mas essa tag no Registry contém apenas uma plataforma. Para enviar imagens multiplataforma, consulte Imagens multiplataforma.

Conferir as tags do Registry e identificar erros

$ wget -qO- http://localhost:5000/v2/tools/alpine/tags/list
{"name":"tools/alpine","tags":["3.23","latest"]}

$ docker push localhost:5000/tools/missing:1.0
The push refers to repository [localhost:5000/tools/missing]
tag does not exist: localhost:5000/tools/missing:1.0

$ docker push docker.io/library/alpine:3.23
The push refers to repository [docker.io/library/alpine]
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Unavailable
5e9b4a97f639: Layer already exists
failed commit on ref "manifest-sha256:3d67941fed5ae436b2bb9791cb3f50a252441c7706bbc5b4e738936df8ff8306": server message: insufficient_scope: authorization failed
  • A lista de tags do Registry confirma que 3.23 e latest existem. Ao tentar enviar uma tag local inexistente, aparece tag does not exist.
  • Ao enviar para docker.io/library/alpine no Docker Hub, aparece por fim insufficient_scope: authorization failed: library/ é o namespace de imagens oficiais, e ninguém pode enviar para ele.
  • Para enviar ao Docker Hub, execute docker login primeiro (consulte os parâmetros na tabela acima) e marque a imagem com um nome da sua conta, por exemplo, sua-conta/alpine:3.23.

Capítulos relacionados

Exercícios

Exercício: marque a imagem local alpine:3.23 como localhost:5000/tools/alpine:latest e, em seguida, envie todas as tags de tools/alpine.

Resposta
docker tag alpine:3.23 localhost:5000/tools/alpine:latest
docker push --all-tags localhost:5000/tools/alpine

Perguntas frequentes

Por que adicionar uma tag de Registry antes de enviar uma imagem?

docker tag cria um nome de destino que aponta para a imagem de origem; o exemplo marca alpine:3.23 como localhost:5000/tools/alpine:3.23 e depois envia esse nome.

Quais tags docker push --all-tags envia?

Ele envia todas as tags do Repository especificado. No exemplo, 3.23 e latest de tools/alpine são enviadas.

O que fazer se aparecer insufficient_scope ao enviar para o Docker Hub?

Isso significa que você não tem permissão para enviar ao Repository. docker.io/library/alpine, no exemplo, pertence ao namespace de imagens oficiais do Docker, para o qual nenhuma conta pessoal pode enviar. Para enviar ao Docker Hub, execute docker login primeiro e marque a imagem como sua-conta/nome:tag. Consulte [Como enviar para o Docker Hub](/pt/docker/docker-hub/).

O aviso Info de plataforma única após um envio bem-sucedido indica uma falha?

O exemplo já informa o digest da tag e, em seguida, mostra que apenas a imagem de plataforma única disponível foi enviada. Esse é um aviso Info e não significa que o envio falhou.

Atualizado 26 de outubro de 2026