Como alterar o registro do docker padrão de docker.io para o meu registro privado?

124

Por padrão, se eu emitir o comando:

sudo docker pull ruby:2.2.1

ele será retirado do site oficial do docker.io por padrão.

Pulling repository docker.io/library/ruby

Como faço para alterá-lo para meu registro particular. Isso significa que se eu emitir

sudo docker pull ruby:2.2.1

ele puxará do meu próprio registro privado, a saída é algo como:

Pulling repository my_private.registry:port/library/ruby
mainframer
fonte
Você conseguiu encontrar uma maneira de fazê-lo funcionar? Eu estava procurando exatamente a mesma coisa. Estou usando o nexus como meu registro privado do docker. Não quero usar meu nome de domínio e número da porta no meu comando docker pull.
Dinesh

Respostas:

56

ATUALIZAÇÃO: após o seu comentário, atualmente não é possível alterar o registro padrão, consulte este problema para obter mais informações.

Você deve conseguir fazer isso, substituindo o host e a porta pelos seus:

docker pull localhost:5000/registry-demo

Se o servidor for remoto / tiver autenticação, pode ser necessário fazer login no servidor com:

docker login https://<YOUR-DOMAIN>:8080

Em seguida, executando:

docker pull <YOUR-DOMAIN>:8080/test-image
Cara
fonte
14
docker pull <YOUR-DOMAIN>:8080/test-imagefoi ok. Mas o que eu quero é docker pull test-image, que é sem especificar o DOMAIN e o Port e sem o login.
mainframer
2
Atualizei minha resposta com base no seu comentário. Atualmente, não é possível definir um registro padrão
Guy
Não é provável que nunca se tornar possível definir um registro padrão diferente também, devido a ele quebrar o namespace padrão que a maioria das imagens dependem
Matt
Eles poderiam fazer algo como @scopesno npm para introduzir novos namespaces sem conflito com os existentes. A inclusão do nome do host do registro no nome da imagem dificulta o armazenamento em cache / proxy / bloqueio do registro dentro de uma empresa ou projeto. Isso o descreve bem: informit.com/articles/article.aspx?p=2464012&seqNum=3 #
Alexander Klimetschek
Este PR parece ser a discussão mais recente sobre esse tópico: github.com/moby/moby/pull/34319
Alexander Klimetschek
21

Acontece que isso é realmente possível, mas não usando a versão original do Docker CE ou EE.

Você pode usar o fork do docker da Red Hat com o sinalizador '--add-registry' ou criar o docker a partir da fonte com o registro / config.go modificado para usar seu próprio espaço para nome / índice de registro padrão embutido no código.

Josiah
fonte
3
O garfo da RedHat é o disponível em centos-extras. Obrigado por me ajudar a entender por que, depois de mudar para a versão docker.io, --add-registryparou de funcionar.
Chutz
2
Você também pode usar a --block-registry index.docker.ioopção para se livrar do registro padrão.
Evan
1
A --add-registry solicitação de recebimento não foi mesclada . Esse recurso foi recusado ( # 11816 ).
Franklin Piat
9

se você estiver usando a distro do fedora, poderá alterar o arquivo

/etc/containers/registries.conf

Adicionando domínio docker.io

Bruno Sousa Sabiá
fonte
Este arquivo de configuração específico redhat é usado para iniciar o dockerd --add-registry. O recurso não será adotado pelo Docker na solicitação pull não foi mesclada . (também recurso foi recusado ( # 11816 ).)
Franklin Piat
6

Parece que não será suportado devido à fragmentação que criaria na comunidade (ou seja, dois usuários receberiam imagens diferentes ubuntu:latest). Você simplesmente precisa adicionar o host na frente do nome da imagem. Veja esta edição do github para participar da discussão.

(Observe que isso não pretende ser um comentário opinativo, apenas um breve resumo da discussão que pode ser seguida na edição do github mencionada.)

datacarl
fonte
10
fragmentação sim, mas apenas com os primeiros dias do linux, eventualmente se tornaram apenas três (fonte de base [arch, gentoo, slax, ...], baseada em debian [debian / ubuntu] e redhat [enterprise linux, rhel, centos]. seria melhor do ponto de vista de segurança para ser capaz de mudar o padrão de registro montante para algo auto-geridas.
Dwight Spencer
2
Dizer "existem apenas três linuxes, redhat, debian e source" é como dizer "existem apenas três provedores de pesquisa: google, bing e todos os outros provedores de pesquisa" ...
Chris Browne
4

Tentei adicionar as seguintes opções no /etc/docker/daemon.json. (Eu usei o CentOS7)

"add-registry": ["192.168.100.100:5001"],
"block-registry": ["docker.io"],

depois disso, reiniciou o daemon do docker. E está funcionando sem o docker.io. Espero que alguém seja útil.

jacobdoni
fonte
Essa configuração é específica ao RedHat. A --add-registry solicitação de recebimento não foi mesclada .
Franklin Piat
2

A posição oficial do Docker é explicada na edição # 11815 :

Problema 11815: Permitir especificar registros padrão usados ​​no comando pull

Resolução:

Como apontado anteriormente (# 11815), isso fragmentaria o espaço para nome e prejudicaria bastante a comunidade, tornando os dockerfiles não mais portáteis.

[o Mantenedor] encerrará isso por esse motivo.

A Red Hat teve uma implementação específica que permitiu (veja a resposta, mas foi recusada pelo projeto upstream do Docker). Ele se baseou em --add-registryargumentos, que foram definidos no /etc/containers/registries.confRHEL / CentOS 7.

Franklin Piat
fonte
1

Anteriormente, isso era possível usando DOCKER_OPTSo /etc/default/dockerarquivo de configuração que funcionava no Ubuntu 14:04 e tinha alguns problemas no Ubuntu 15:04. Não tenho certeza se isso foi corrigido.

A linha abaixo precisa ir para o arquivo /etc/default/dockerno host que executa o daemon do docker. Os pontos de alteração no registro privado estão instalados na sua rede local. Nota: você precisaria reiniciar o serviço docker seguido por essa alteração.

DOCKER_OPTS="--insecure-registry <priv registry hostname/ip>:<port>"
askb
fonte
11
O sinalizador '--insecure-registry' permite que o docker puxe do registro nomeado sem autenticação TLS. Não faz nada para definir um registro padrão quando um não é especificado.
19718 Josiah
0

Estou adicionando a resposta original dada por Guy, que ainda é válida hoje (em breve em 2020).

Substituir o registro do docker padrão, como você faria com maven, na verdade não é uma boa prática.

Ao usar maven, você puxa artefatos do Maven Central Repository através do sistema de gerenciamento de repositório local que atuará como um proxy. Esses artefatos são bibliotecas simples e brutas (jars) e é bastante improvável que você empurre jars com o mesmo nome.

Por outro lado, as imagens do Docker são ambientes totalmente operacionais, executáveis ​​e fazem total sentido extrair uma imagem do Docker Hub, modificá-la e enviar essa imagem no sistema de gerenciamento de registro local com o mesmo nome, porque é exatamente como o nome diz, apenas no contexto da sua empresa. Nesse caso, a única distinção entre as duas imagens seria precisamente o seu caminho !!

Portanto, a necessidade de definir a seguinte regra: o prefixo de uma imagem indica sua origem; por padrão, se uma imagem não tiver um prefixo, ela será extraída do Docker Hub.

avi.elkharrat
fonte
Por esse motivo, o repositório maven que armazena lançamentos por padrão não permite a substituição e oferece classificadores. Da mesma forma, a janela de encaixe usa tags.
coz
-5

Não tentei, mas talvez seqüestro do processo de resolução de DNS, adicionando uma linha no /etc/hostspara hub.docker.comou algo semelhante ( docker.io?) Poderia trabalhar?

akavel
fonte
4
Isso explodirá no estágio de conexão; o servidor ao qual você se conecta não terá um certificado TLS adequado para o domínio.
Michael Mol