¿Cómo cambiar el registro de Docker predeterminado de docker.io a mi registro privado?

124

Por defecto, si doy un comando:

sudo docker pull ruby:2.2.1

se extraerá del sitio oficial de docker.io de forma predeterminada.

Pulling repository docker.io/library/ruby

¿Cómo lo cambio a mi registro privado? Eso significa que si emito

sudo docker pull ruby:2.2.1

extraerá de mi propio registro privado, el resultado es algo como:

Pulling repository my_private.registry:port/library/ruby
mainframer
fuente
¿Pudiste encontrar una manera de hacerlo funcionar? Estaba buscando exactamente lo mismo. Estoy usando nexus como mi registro privado de Docker. No quiero usar mi nombre de dominio y número de puerto en mi comando docker pull.
Dinesh

Respuestas:

56

ACTUALIZACIÓN: Siguiendo su comentario, actualmente no es posible cambiar el registro predeterminado, consulte este problema para obtener más información.

Debería poder hacer esto, sustituyendo el host y el puerto por los suyos:

docker pull localhost:5000/registry-demo

Si el servidor es remoto / tiene autenticación, es posible que deba iniciar sesión en el servidor con:

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

Luego corriendo:

docker pull <YOUR-DOMAIN>:8080/test-image
Chico
fuente
14
docker pull <YOUR-DOMAIN>:8080/test-imageestaba bien. Pero lo que quiero es docker pull test-image, que es sin especificar el DOMINIO y el puerto y sin iniciar sesión.
mainframer
2
He actualizado mi respuesta en base a su comentario. Actualmente no es posible establecer un registro predeterminado
Guy
Tampoco es probable que sea posible establecer un registro predeterminado diferente, debido a que rompe el espacio de nombres predeterminado en el que se basan la mayoría de las imágenes
Matt
Podrían hacer algo como @scopesen npm para introducir nuevos espacios de nombres sin entrar en conflicto con los existentes. Tener el nombre de host del registro incluido en el nombre de la imagen dificulta el almacenamiento en caché / proxy / bloqueo del registro dentro de una empresa o proyecto. Esto lo describe bien: informit.com/articles/article.aspx?p=2464012&seqNum=3
Alexander Klimetschek
Este PR parece ser la discusión más reciente sobre ese tema: github.com/moby/moby/pull/34319
Alexander Klimetschek
21

Resulta que esto es realmente posible, pero sin usar la versión genuina de Docker CE o EE.

Puede usar la bifurcación de la ventana acoplable de Red Hat con la marca '--add-registry' o puede construir la ventana acoplable desde la fuente usted mismo con registro / config.go modificado para usar su propio índice / espacio de nombres de registro predeterminado codificado.

Josías
fuente
3
La horquilla de RedHat es la que está disponible en centos-extras. Gracias por ayudarme a entender por qué después de cambiar a la versión docker.io --add-registrydejó de funcionar.
chutz
2
También puede utilizar la --block-registry index.docker.ioopción para deshacerse del registro predeterminado.
Evan
1
La --add-registry solicitud de extracción fue no fusionada . Esta característica fue finalmente rechazada ( # 11816 ).
Franklin Piat
9

si está utilizando la distribución de fedora, puede cambiar el archivo

/etc/containers/registries.conf

Agregar dominio docker.io

Bruno Sousa Sabiá
fuente
Este archivo de configuración específico de redhat se usa para iniciar dockerd con --add-registry. La función no será adoptada por Estibador en solicitud de extracción fue no fusionado . (También la función fue finalmente rechazada ( # 11816 ).
Franklin Piat
6

Parece que no será compatible debido a la fragmentación que crearía dentro de la comunidad (es decir, dos usuarios obtendrían diferentes imágenes extraídas ubuntu:latest). Simplemente tienes que agregar el host delante del nombre de la imagen. Vea este número de github para unirse a la discusión.

(Tenga en cuenta que esto no pretende ser un comentario obstinado, solo un resumen muy breve de la discusión que se puede seguir en el problema de github mencionado).

datacarl
fuente
10
fragmentación sí, pero solo con los primeros días de linux eventualmente se convirtieron en solo tres (fuente base [arch, gentoo, slax, ...], basada en debian [debian / ubuntu] y basada en redhat [enterprise linux, rhel, centos]. Sería mejor desde el punto de vista de la seguridad poder cambiar el registro ascendente predeterminado a algo autogestionado.
Dwight Spencer
2
Decir "solo hay tres linuxes, redhat, debian y source" es como decir "solo hay tres proveedores de búsqueda: google, bing y todos los demás proveedores de búsqueda" ...
Chris Browne
4

Intenté agregar las siguientes opciones en /etc/docker/daemon.json. (Usé CentOS7)

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

después de eso, reinició el demonio de la ventana acoplable. Y funciona sin docker.io. Espero que esta persona sea de ayuda.

jacobdoni
fuente
Esta configuración es específica de RedHat. La --add-registry solicitud de extracción fue no fusionada .
Franklin Piat
2

La posición oficial de Docker se explica en el número 11815 :

Problema 11815: Permitir especificar los registros predeterminados utilizados en el comando de extracción

Resolución:

Como se señaló anteriormente (# 11815), esto fragmentaría el espacio de nombres y dañaría bastante a la comunidad, haciendo que los archivos docker ya no sean portátiles.

[el Mantenedor] cerrará esto por este motivo.

Red Hat tenía una implementación específica que lo permitía (ver anwser, pero fue rechazado por Docker upstream projet). Se basó en el --add-registryargumento, que se estableció en /etc/containers/registries.confRHEL / CentOS 7.

Franklin Piat
fuente
1

Anteriormente, esto se podía lograr usando DOCKER_OPTSel /etc/default/dockerarchivo de configuración que funcionaba en Ubuntu 14:04 y tenía algunos problemas en Ubuntu 15:04. No estoy seguro de si esto se ha solucionado.

La siguiente línea debe ir al archivo /etc/default/dockeren el host que ejecuta el demonio de la ventana acoplable. El cambio apunta a que el registro privado está instalado en su red local. Nota: deberá reiniciar el servicio de la ventana acoplable seguido de este cambio.

DOCKER_OPTS="--insecure-registry <priv registry hostname/ip>:<port>"
preguntarb
fuente
11
La marca '--insecure-registry' permite a Docker extraer del registro nombrado sin autenticación TLS. No hace nada para establecer un registro predeterminado cuando no se especifica uno.
Josiah
0

Estoy agregando la respuesta original dada por Guy, que todavía es válida hoy (próximamente en 2020).

Anular el registro de Docker predeterminado, como lo haría con maven, en realidad no es una buena práctica.

Al usar maven, extrae artefactos del Repositorio Central de Maven a través de su sistema de administración de repositorio local que actuará como un proxy. Estos artefactos son librerías (jar) simples y sin procesar y es poco probable que envíe jarras con el mismo nombre.

Por otro lado, las imágenes de Docker son entornos completamente operativos, ejecutables, y tiene total sentido extraer una imagen de Docker Hub, modificarla y enviar esta imagen a su sistema de administración de registro local con el mismo nombre, porque es exactamente lo que dice su nombre, solo en el contexto de su empresa. ¡En este caso, la única distinción entre las dos imágenes sería precisamente su trayectoria!

Por tanto, es necesario establecer la siguiente regla: el prefijo de una imagen indica su origen; de forma predeterminada, si una imagen no tiene prefijo, se extrae de Docker Hub.

avi.elkharrat
fuente
Precisamente por esta razón, el repositorio de maven que almacena versiones de forma predeterminada no permite sobrescribir y ofrece clasificadores. De manera similar, Docker usa etiquetas.
Porque
-5

No he probado, pero tal vez secuestrar el proceso de resolución de DNS mediante la adición de una línea en /etc/hostspara hub.docker.como algo similar ( docker.io?) Podría funcionar?

akavel
fuente
4
Eso explotará en la etapa de conexión; el servidor al que se conecta no tendrá un certificado TLS adecuado para el dominio.
Michael Mol