pricing - Usando registro privado alojado en docker
imagenes de docker (7)
Registre una clave SSL desde https://letsencrypt.org/ Si necesita más instrucciones, consulte este enlace .
Habilitar SSL para nginx. Atención a la parte SSL en el código a continuación, después de registrar la clave SSL, tiene
fullchain.pem
,privkey.pem
,dhparam.pem
usándola para nginx para habilitar SSL.
`
server {
listen 443;
server_name docker.mydomain.com;
# SSL
ssl on;
ssl_certificate /etc/nginx/conf.d/fullchain.pem;
ssl_certificate_key /etc/nginx/conf.d/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/conf.d/dhparam.pem;
ssl_ciphers ''EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
# disable any limits to avoid HTTP 413 for large image uploads
client_max_body_size 0;
# required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
chunked_transfer_encoding on;
location /v2/ {
# Do not allow connections from docker 1.5 and earlier
# docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
if ($http_user_agent ~ "^(docker//1/.(3|4|5(?!/.[0-9]-dev))|Go ).*$" ) {
return 404;
}
# To add basic authentication to v2 use auth_basic setting plus add_header
auth_basic "registry.localhost";
auth_basic_user_file /etc/nginx/conf.d/registry.password;
add_header ''Docker-Distribution-Api-Version'' ''registry/2.0'' always;
proxy_pass http://docker-registry;
proxy_set_header Host $http_host; # required for docker client''s sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client''s IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
}
}
Resuelve mi problema, espera que te ayude.
Estoy alojando mi propio registro acoplable en un contenedor acoplable. Está liderado por nginx que se ejecuta en un contenedor separado para agregar autenticación básica. Verificando las rutas de _ping puedo ver que nginx está enrutando apropiadamente. Al llamar al docker login
de docker login
desde boot2docker (en Mac OSX), aparece este error:
FATA [0003] Respuesta de error del demonio: Punto de registro no válido https://www.example.com:8080/v1/ : Obtenga https://www.example.com:8080/v1/_ping : x509: certificado firmado por desconocido autoridad. Si este registro privado solo admite HTTP o HTTPS con un certificado de CA desconocido, agregue
--insecure-registry www.example.com:8080
a los argumentos del daemon. En el caso de HTTPS, si tiene acceso al certificado de CA del registro, no necesita la bandera; simplemente coloque el certificado de CA en /etc/docker/certs.d/www.example.com:8080/ca.crt
Lo cual es extraño, porque es un certificado CA SSL válido. He intentado agregar --insecure-registry
en EXTRA-ARGS según estas instrucciones: https://github.com/boot2docker/boot2docker#insecure-registry pero inicialmente el archivo ''perfil'' no existe. Si lo creo, y añado
EXTRA_ARGS="--insecure-registry www.example.com:8080"
No veo ninguna mejora. Quería aislar el ejemplo y así intenté docker login
en la ventana docker login
desde una máquina virtual de ubuntu (no boot2docker). Ahora me sale un error diferente:
Error response from daemon:
El registro de la ventana acoplable se ejecuta directamente desde el hub público, por ejemplo,
docker run -d -p 5000:5000 registry
(Tenga en cuenta que las rutas nginx de 8080 a 5000). Cualquier ayuda y / o recursos para ayudar a depurar esto serían muy apreciados.
ACTUALIZAR
Estaba buscando una guía para ayudar a resolver este problema de manera integral. Específicamente:
- Crear un registro privado
- Asegurar el registro con autenticación básica.
- Usa el registro de boot2docker
He creado el registro y probado localmente, funciona. He asegurado el registro con nginx agregando autenticación básica.
El problema ahora es usar el registro de dos tipos de clientes:
1) Cliente no boot2docker. Una de las respuestas a continuación ayudó con esto. Agregué la marca --insecure-registry a las opciones en / etc / default / docker y ahora puedo hablar con mi registro remoto de docker. Sin embargo, esto no es compatible con autenticación, ya que el inicio de sesión de la ventana acoplable recibe un error:
2015/01/15 21:33:57 HTTP code 401, Docker will not send auth headers over HTTP.
Entonces, si quiero usar auth, necesitaré usar HTTPS. Ya tengo este servidor sirviendo a través de HTTPS, pero eso no funciona si configuro --insecure-registry. Parece que hay un problema de confianza del certificado, que estoy seguro de que puedo resolver en non-boot2docker pero ...
2) Para un cliente boot2docker, ¿no puedo hacer que --insecure-registry funcione o que los certificados sean confiables?
ACTUALIZACIÓN 2
Después de esta pregunta de intercambio de pila , logré agregar la ca a mi VM de Ubuntu y ahora puedo usarla desde un cliente que no sea boot2docker. Sin embargo, todavía hay un montón de comportamiento extraño.
Aunque mi usuario actual es miembro del grupo docker (por lo que no tengo que usar sudo) ahora tengo que usar sudo o recibo el siguiente error al intentar iniciar sesión o extraer de mi registro privado
user@ubuntu:~$ docker login example.com:8080
WARNING: open /home/parallels/.dockercfg: permission denied
parallels@ubuntu:~$ docker pull example.com:8080/hw:1
WARNING: open /home/parallels/.dockercfg: permission denied
Y cuando ejecuto contenedores extraídos de mi registro privado por primera vez, tengo que especificarlos por ID de imagen, no por su nombre.
A partir de la versión 1.3.1 de Docker, si su registro no admite HTTPS, debe agregarlo como un registro inseguro. Para boot2docker, esto es un poco más complicado de lo habitual. Consulte: https://github.com/boot2docker/boot2docker#insecure-registry
Los comandos relevantes son:
$ boot2docker init
$ boot2docker up
$ boot2docker ssh
$ echo ''EXTRA_ARGS="--insecure-registry <YOUR INSECURE HOST>"'' | sudo tee -a /var/lib/boot2docker/profile
$ sudo /etc/init.d/docker restart
Si desea agregar certificados SSL a la instancia de boot2docker, va a ser algo similar (boot2docker ssh seguido de sudo).
Edita el archivo docker
sudo vim /etc/default/docker
Añade el DOCKER_OPTS
DOCKER_OPTS="$DOCKER_OPTS --insecure-registry=www.example.com:8080"
Reiniciando el servicio docker
sudo service docker restart
Ejecuta el siguiente comando:
boot2docker ssh "echo $''EXTRA_ARGS=/"--insecure-registry <YOUR INSECURE HOST>/"'' | sudo tee -a /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"
Intenta ejecutar el demonio con los argumentos:
docker -d --insecure-registry="www.example.com:8080"
en lugar de establecer EXTRA_ARGS
La versión de Docker> 1.3.1 se comunica a través de HTTPS de forma predeterminada al conectarse al registro de la ventana acoplable
Si está utilizando Nginx para proxy_pass al puerto 5000 donde el registro de la ventana acoplable está escuchando, deberá terminar la conexión SSL del cliente de la ventana acoplable al registro de la ventana acoplable en el servidor web / LB (Nginx en este caso). Para verificar si Nginx está terminando la conexión SSL, use cURL https://www.example.com:8081/something donde 8081 es otro puerto configurado para probar el certificado SSL.
Si no le importa si su cliente docker se conecta al registro a través de HTTP y no a través de HTTPS, agregue
OPCIONES = "- inseguro-registro www.ejemplo.com:8080"
en / etc / sysconfig / docker (o equivalente en otras distribuciones) y reinicie el servicio de docker.
Espero eso ayude.
Para ubuntu, modifique el archivo / etc / default / docker
DOCKER_OPTS="$DOCKER_OPTS --insecure-registry=10.27.19.230:5000"
Para rehl, modifique el archivo / etc / sysconfig / docker
other_args="--insecure-registry 10.27.19.230:5000"