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í:
- Haga clic en el ícono de ballena docker desde la bandeja de mac en la esquina superior derecha de su pantalla.
- Haga clic en Preferencias -> Daemon .
- Agregue su IP y puerto a los registros inseguros.
- 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)
Para ahorrarte molestias, ¿por qué no usas el servicio GRATUITO de registro de porteros privados proporcionado por gitlab?
https://about.gitlab.com/2016/05/23/gitlab-container-registry/
Su registro es seguro, por lo que no tendrá ningún problema
Solución de dos pasos (sin --insecure-registry
):
- Descarga la clave pública de tu registro
- 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