tag run remove name hub example docker remote-access docker-registry

run - ¿Cómo obtener acceso remoto a un docker-registro privado?



docker tag example (16)

Estoy tratando de configurar un registro de acoplador privado usando la imagen tomada de: https://github.com/docker/docker-registry

Solo ejecutando:
docker run -p 5000:5000 registry

Puedo arrastrar / presionar desde / hacia este repositorio solo desde localhost, pero si trato de acceder desde otra máquina (usando una dirección privada en la misma LAN) falla con un mensaje de error:

*2014/11/03 09:49:04 Error: Invalid registry endpoint https ://10.0.0.26:5000/v1/'': Get https:// 10.0.0.26:5000/v1/_ping: Forbidden. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 10.0.0.26:5000` to the daemon''s arguments. In the case of HTTPS, if you have access to the registry''s CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/10.0.0.26:5000/ca.crt*

Lo que me vuelve loco es que puedo acceder a él con éxito usando: curl 10.0.0.26:5000 y / o curl 10.0.0.26:5000/v1/search

Tampoco entiendo dónde y cómo debería pasar el --insecure-registry .


Además de las respuestas anteriores, estoy agregando lo que funcionó en "docker for mac" para mí:

  1. Haga clic en el ícono de ballena docker desde la bandeja de mac en la esquina superior derecha de su pantalla.
  2. Haga clic en Preferencias -> Daemon .
  3. Agregue su IP y puerto a los registros inseguros.
  4. Reinicia el Daemon.


Configuración del registro inseguro local en la ventana acoplable junto con el proxy:

1) en ubuntu agregue la siguiente marca --insecure-registry IP: puerto bajo DOCKER_OPTS en el archivo / etc / default / docker

1.1) configure la variable env no_proxy para eludir IP / nombre de host / nombre de dominio local ... ya que el proxy puede lanzar un mensaje interactivo ... como continuar y este mensaje intermedio confunde al cliente de la estación de acoplamiento y, finalmente, expira ...

1.2) si el nombre de dominio está configurado ... entonces no se olvide de actualizar el archivo / etc / hosts si no usa DNS.

1.3) en / etc / default / docker establece las variables de env http_proxy y https_proxy ... ya que permite descargar imágenes de centros de empresa externos. formato http_proxy = http://username:password@proxy:port

2) reinicie el servicio de acoplador ... si está instalado como servicio, use el servicio de sudo docker restart

3) reinicie el contenedor de registro [sudo docker run -p 5000: 5000 registry: 2]

4) etiquetar la imagen requerida con la etiqueta de sudo docker. Imageid IP: puerto / nombre de la imagen / nombre de la etiqueta ifany

5) empujar la imagen ... sudo docker push ip: port / imagename

6) Si desea extraer la imagen de otra máquina, digamos B sin TLS / SSL, entonces en B aplique setps 1,1.1 y 2. Si estos cambios no se realizan en la máquina B ... la extracción fallará.


De acuerdo. Así es como lo hice funcionar. Si ve este error en la ventana acoplable 1.3.2 o superior, haga esto

ve a /etc/sysconfig/docker

other_args="--insecure-registry 10.0.0.26:5000"

y correr

sudo service docker restart


Descubrí que la versión de cliente de Docker y la de docker de registro tienen que coincidir, de lo contrario se encontraría con problemas de conectividad, a pesar de tener todo en su lugar.


Edite el archivo de configuración "/ etc / default / docker"

sudo vi / etc / default / docker

agregue la línea al final del archivo

DOCKER_OPTS = "$ DOCKER_OPTS --insecure-registry = 192.168.2.170: 5000"

(reemplace el 192.168.2.170 con su propia dirección IP)

y reinicia el servicio del acoplador

sudo service docker restart


Encontré que lo siguiente es muy útil ya que explica cómo se configura el servicio Docker. https://docs.docker.com/articles/systemd/

Junto con este artículo sobre el comando systemctl https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units

Utilicé la siguiente serie de comandos en un contenedor basado en Centos 7 con una imagen de registro obtenida por "docker pull registry: 2.1.1"

sudo mkdir -p /etc/systemd/system/docker.service.d cd /etc/systemd/system/docker.service.d sudo touch override.conf sudo nano override.conf

Y dentro de override.conf se agregó lo siguiente.

[Service] ExecStart= ExecStart=/usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000

Tenga en cuenta que el primero, en blanco, ExecStart = borra todo lo que ya está en su lugar, así que asegúrese de agregar algo de la declaración /usr/lib/systemd/system/docker.service ExecStart = que desea conservar.

Si no especifica la opción -d (daemon), obtendrá el error "Especifique solo uno -H".

Después de emitir la siguiente serie de comandos, puedo ver mis reemplazos en su lugar.

sudo systemctl stop docker sudo systemctl daemon-reload sudo systemctl start docker sudo systemctl status docker docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled) Drop-In: /etc/systemd/system/docker.service.d └─override.conf Active: active (running) since Thu 2015-09-17 13:37:34 AEST; 7s ago Docs: https://docs.docker.com Main PID: 5697 (docker) CGroup: /system.slice/docker.service └─5697 /usr/bin/docker -d -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 10.2.3.4:5000

NOTA: La información proporcionada por Loaded: y Drop-In: líneas en el mensaje de estado, son útiles para verificar qué está sucediendo con un daemon docker preexistente para que funcione.

NOTA: También eche un vistazo en el archivo Loaded: docker.service para un EnvironmentFile = para obtener más pistas.


Esto es lo que funcionó para mí en CentOS 7.2 y Docker 1.12.1 (más reciente que en la fecha). Mi registro privado v2 se estaba ejecutando en 192.168.1.88:5000 , cámbielo en consecuencia. Esto también funciona si tienes múltiples registros, solo sigue agregando --insecure-registry IP:Port

$ sudo vim /usr/lib/systemd/system/docker.service #ExecStart=/usr/bin/dockerd ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.88:5000 $ $ sudo systemctl stop docker $ sudo systemctl daemon-reload $ systemctl start docker


Esto se basa en la respuesta de vikas027 en Centos 7 y Docker 1.12

Como estoy detrás de un proxy, mi solución completa fue ...

/etc/systemd/system/docker.service.d/http-proxy.conf

[Service] Environment="FTP_PROXY={{MY_PROXY}}" Environment="ftp_proxy={{MY_PROXY}}" Environment="HTTPS_PROXY={{MY_PROXY}}" Environment="https_proxy={{MY_PROXY}}" Environment="HTTP_PROXY={{MY_PROXY}}" Environment="http_proxy={{MY_PROXY}}" Environment="NO_PROXY=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}" Environment="no_proxy=localhost,127.0.0.1,{{MY_INSECURE_REGISTRY_IP}}"

/usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd --insecure-registry {{MY_INSECURE_REGISTRY_IP}}:5000

y no te olvides de reiniciar :)

sudo systemctl daemon-reload; sudo systemctl restart docker;


Lo siguiente ha sido probado con:

ubuntu@ubuntu-xenial:~$ docker -v Docker version 17.05.0-ce, build 89658be

Probé todas las respuestas mencionadas anteriormente, pero ninguna de estas me funcionó.

Estaba siguiendo estas instrucciones para que funcione

openssl req / -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key / -x509 -days 365 -out certs/domain.crt

y

Linux: Copy the domain.crt file to /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt on every Docker host. You do not need to restart Docker.

y ocurrieron otros problemas que se resolvieron de la siguiente manera:

Número 1

Error response from daemon: Get https://10.20.30.40:8001/v1/users/: x509: cannot validate certificate for 10.20.30.40 because it doesn''t contain any IP SANs

solución

mapeo de host en / etc / hosts:

10.20.30.40 somehost

Número 2

Error response from daemon: Get https://somehost:8001/v1/users/: x509: certificate is valid for , not somehost

solución

vuelva a ejecutar el comando openssl

$ openssl req / -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key / -x509 -days 365 -out certs/domain.crt

presione Intro en cada paso excepto en:

Common Name (e.g. server FQDN or YOUR name) []:

y escriba el fqdn del registro, es decir, somehost

Asegúrese de usar el nombre myregistrydomain.com como CN.

iniciar sesión en el registro tiene éxito ahora

Número 3

Respuesta de error de daemon: Obtenga https://somehost:8001/v1/users/ : x509: certificado firmado por una autoridad desconocida

solución

sudo mkdir -p /etc/docker/certs.d/somehost:8001/ sudo cp certs/domain.crt /etc/docker/certs.d/somehost:8001/ca.crt


OK - Encontré la solución a esto - después de un día de excavación.

Para el docker debajo de 1.12.1:

Resulta que la nueva versión del cliente se niega a trabajar con un registro privado sin SSL.

Para solucionar esto: el daemon en la máquina cliente debe iniciarse con la bandera insegura:

Sólo tipo:

sudo service docker stop # to stop the service

y entonces

sudo docker -d --insecure-registry 10.0.0.26:5000

(reemplace el 10.0.0.26 con su propia dirección IP).

Esperaría que los tipos acopladores añadieran esta opción a la línea de comando de extracción / extracción ...

Editar - altenantively - puede agregar el indicador a la variable env DOCKER_OPTS dentro de / etc / default / docker ... y luego sudo service docker restart

Edite de nuevo - Parece que los estibadores están en él - y pronto habrá una solución: https://github.com/docker/docker/pull/8935

Para docker 1.12.1:

Por favor, siga a continuación la respuesta de vikas027 (válido para centos)



Solución de dos pasos (sin --insecure-registry ):

  1. Descarga la clave pública de tu registro
  2. Ponlo en el directorio /etc/docker/certs.d/$HOSTNAME/

mkdir -p /etc/docker/certs.d/10.0.0.26:5000 echo -n | openssl s_client -connect 10.0.0.26:5000 | sed -ne ''/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'' > /etc/docker/certs.d/10.0.0.26:5000/registry.crt

Ahora su docker confiará en su certificado autofirmado.


edite el archivo docker.service, agregue --insecure-registry xxxx after -d flag, reinicie el docker

esto es lo único que funcionó para mí, el DOCKER_OPTS no tuvo ningún efecto


utilice el siguiente comando reemplazando {YOUR_REGISTRY} con su registro

boot2docker ssh "echo $''EXTRA_ARGS=/"--insecure-registry {YOUR_REGISTRY}/"'' | sudo tee -a /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"


Docker 1.12.1

Para CentOS 7.2

/usr/lib/systemd/system/docker.service #ExecStart=/usr/bin/dockerd ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000

Para ubuntu 16.04

/lib/systemd/system/docker.service #ExecStart=/usr/bin/dockerd -H fd:// ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000 -H fd:// sudo systemctl stop docker sudo systemctl daemon-reload sudo systemctl start docker

Parece que la opción --insecure-registry puede usarse con y sin el "=" entre ella y la identificación del registro.


Ubuntu 16.04

Crear (no existe) el archivo /etc/systemd/system/docker.service.d/registry.conf con contenido:

[Service] #You need the below or you ''ExecStart='' or you will get and error ''Service has more than one ExecStart= setting, which is only allowed'' ExecStart= ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 10.20.30.40:5000

entonces

sudo systemctl stop docker sudo systemctl daemon-reload sudo systemctl start docker