tutorial subir propia imagenes imagen hub eliminar crear contenedor comandos proxy docker

subir - No se pueden descargar imágenes de Docker detrás de un proxy



imagenes docker (22)

¿Por qué un proxy vinculado localmente no funciona?

El problema

Si está ejecutando un proxy vinculado localmente , por ejemplo, escuchando 127.0.0.1:8989 , NO FUNCIONARÁ en Docker para Mac . De la documentación de Docker :

Quiero conectarme desde un contenedor a un servicio en el host

La Mac tiene una dirección IP cambiante (o ninguna si no tiene acceso a la red). Nuestra recomendación actual es adjuntar una IP no utilizada a la interfaz lo0 en la Mac; por ejemplo: sudo ifconfig lo0 alias 10.200.10.1/24 , y asegúrese de que su servicio esté escuchando en esta dirección o 0.0.0.0 (es decir, no 127.0.0.1 ). Entonces los contenedores pueden conectarse a esta dirección.

Lo similar es para el lado del servidor Docker. (Para comprender el lado del servidor y el lado del cliente de Docker, intente ejecutar la docker version ). Y el lado del servidor se ejecuta en una capa de virtualización que tiene su propio localhost . Por lo tanto, no se conectará al servidor proxy en el host local del sistema operativo host.

La solución

Entonces, si estás usando un proxy vinculado localmente como yo, básicamente deberías hacer lo siguiente para que funcione con Docker para Mac:

  1. Haga que su servidor proxy escuche en 0.0.0.0 lugar de 127.0.0.1 . Precaución: necesitará una configuración de firewall adecuada para evitar el acceso malicioso a él.

  2. Agregue un alias de loopback a la interfaz lo0 , por ejemplo, 10.200.10.1/24 :

    sudo ifconfig lo0 alias 10.200.10.1/24

  3. Establezca el proxy HTTP y / o HTTPS a 10.200.10.1:8989 desde Preferencias en el menú de la bandeja de Docker (suponga que el servidor proxy está escuchando en el puerto 8989 ).

Después de eso, pruebe la configuración del proxy ejecutando un comando en un nuevo contenedor desde una imagen que no se descarga:

$ docker rmi -f hello-world ... $ docker run hello-world Unable to find image ''hello-world:latest'' locally latest: Pulling from library/hello-world c04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 Status: Downloaded newer image for hello-world:latest ...

Aviso: el alias de bucle de retorno establecido por ifconfig no se conserva después de un reinicio. Hacerlo persistente es otro tema. Por favor revise esta publicación de blog en japonés (Google Translate puede ayudar).

Instalé Docker en mi Ubuntu 13.10 (Saucy Salamander) y cuando escribo en mi consola:

sudo docker pull busybox

Obtuve el siguiente error:

Pulling repository busybox 2014/04/16 09:37:07 Get https://index.docker.io/v1/repositories/busybox/images: dial tcp: lookup index.docker.io on 127.0.1.1:53: no answer from server

Versión Docker:

$ sudo docker version Client version: 0.10.0 Client API version: 1.10 Go version (client): go1.2.1 Git commit (client): dc9c28f Server version: 0.10.0 Server API version: 1.10 Git commit (server): dc9c28f Go version (server): go1.2.1 Last stable version: 0.10.0

Estoy detrás de un servidor proxy sin autenticación, y este es mi archivo /etc/apt/apt.conf :

Acquire::http::proxy "http://192.168.1.1:3128/"; Acquire::https::proxy "https://192.168.1.1:3128/"; Acquire::ftp::proxy "ftp://192.168.1.1:3128/"; Acquire::socks::proxy "socks://192.168.1.1:3128/";

¿Qué estoy haciendo mal?


Aquí hay un enlace a la documentación oficial de Docker para proxy HTTP: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

Un resumen rápido:

Primero, cree un directorio desplegable de systemd para el servicio Docker:

mkdir /etc/systemd/system/docker.service.d

Ahora cree un archivo llamado /etc/systemd/system/docker.service.d/http-proxy.conf que agregue la variable de entorno HTTP_PROXY :

[Service] Environment="HTTP_PROXY=http://proxy.example.com:80/"

Si tiene registros internos de Docker con los que necesita contactar sin proxy, puede especificarlos mediante la variable de entorno NO_PROXY :

Environment="HTTP_PROXY=http://proxy.example.com:80/" Environment="NO_PROXY=localhost,127.0.0.0/8,docker-registry.somecorporation.com"

Cambios de descarga:

$ sudo systemctl daemon-reload

Verifique que la configuración ha sido cargada:

$ sudo systemctl show --property Environment docker Environment=HTTP_PROXY=http://proxy.example.com:80/

Reiniciar Docker:

$ sudo systemctl restart docker


Como todavía no puedo comentar:

Para CentOS 7 necesitaba activar el archivo de entorno en "docker.service" como se describe aquí: Controle y configure Docker con systemd .

Edit: Estoy agregando mi solución como lo dijo Nilesh. Necesitaba abrir "/etc/systemd/system/docker.service" y tuve que agregar dentro de la sección

[Servicio]

EnvironmentFile = - / etc / sysconfig / docker

Solo entonces se cargó el archivo "etc / sysconfig / docker" en mi sistema.


Después de instalar Docker, haga lo siguiente:

[mdesales@pppdc9prd1vq ~]$ sudo HTTP_PROXY=http://proxy02.ie.xyz.net:80 ./docker -d & [2] 20880

Entonces, puedes tirar o hacer cualquier cosa:

mdesales@pppdc9prd1vq ~]$ sudo docker pull base 2014/04/11 00:46:02 POST /v1.10/images/create?fromImage=base&tag= [/var/lib/docker|aa088847] +job pull(base, ) Pulling repository base b750fe79269d: Download complete 27cf78414709: Download complete [/var/lib/docker|aa088847] -job pull(base, ) = OK (0)


En CentOS, el archivo de configuración de Docker está en:

/etc/sysconfig/docker

Agregar la línea de abajo me ayudó a que el demonio Docker trabajara detrás de un servidor proxy:

HTTP_PROXY="http://<proxy_host>:<proxy_port>" HTTPS_PROXY="http://<proxy_host>:<proxy_port>"


En RHEL6.6 solo funciona esto (note el uso de export ):

/ etc / sysconfig / docker

export http_proxy="http://myproxy.example.com:8080" export https_proxy="http://myproxy.example.com:8080"

NOTA: Ambos pueden usar el protocolo http .)

Gracias a https://crondev.com/running-docker-behind-proxy/


En Ubuntu 14.04 (Trusty Tahr) con Docker 1.9.1, simplemente descomenté la línea http_proxy , actualicé el valor y luego reinicié el servicio Docker.

export http_proxy="http://proxy.server.com:80"

y entonces

service docker restart


En Ubuntu, debe configurar el http_proxy para el demonio Docker, no el proceso del cliente. Esto se hace en /etc/default/docker (ver here ).


En la nueva versión de Docker, docker-engine , en una distribución basada en systemd , debe agregar la línea de variable de entorno a /lib/systemd/system/docker.service , como lo mencionan otros:

Environment="HTTP_PROXY=http://hostname_or_ip:port/"


En mi red, Ubuntu funciona detrás de un servidor proxy ISA corporativo. Y requiere autenticación. Probé todas las soluciones mencionadas anteriormente y nada ayudó. Lo que realmente ayudó fue escribir una línea proxy en el archivo /etc/systemd/system/docker.service.d/https-proxy.conf sin un nombre de dominio.

En lugar de

Environment="HTTP_PROXY=http://user@domain:password@proxy:8080"

o

Environment="HTTP_PROXY=http://domain/user:password@proxy:8080"

y algún otro reemplazo como @ -> %40 o / -> // traté de usar

Environment="HTTP_PROXY=http://user:password@proxy:8080"

Y funciona ahora.


Esta es la solución que funcionó para mí: Ubuntu, Docker versión: 1.6.2

En el archivo /etc/default/docker , agregue la línea:

export http_proxy=''http://<host>:<port>''

Reiniciar Docker

sudo service docker restart


La simple configuración de variables de entorno proxy no me ayudó en la versión 1.0.1 ... Tuve que actualizar el archivo /etc/default/docker.io con el valor correcto para la variable "http_proxy".


Para configurar Docker para que funcione con un proxy, debe agregar la variable de entorno HTTPS_PROXY / HTTP_PROXY al archivo sysconfig de Docker ( /etc/sysconfig/docker ).

Dependiendo de si utiliza init.d o la herramienta de servicios, necesita agregar la declaración "exportar" (debido a los registros de informes de errores de Debian - # 767441. Los ejemplos en / etc / default / docker son confusos con respecto a la sintaxis admitida ):

HTTPS_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>" HTTP_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>" export HTTP_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>" export HTTPS_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"

El repositorio de Docker (Docker Hub) solo admite HTTPS. Para que Docker trabaje con proxy de intercepción de SSL, debe agregar el certificado de raíz proxy al almacén de confianza de sistemas.

Para CentOS, copie el archivo en /etc/pki/ca-trust/source/anchors/ y actualice el almacén de confianza de CA y reinicie el servicio Docker.

Si su proxy usa autenticación NTLMv2, necesita usar proxies intermedios como Cntlm para cerrar la autenticación. Esta entrada del blog lo explica en detalle .


Para extender la respuesta de Arun anterior, para que esto funcione en CentOS 7, tuve que eliminar los comandos "exportar". Así que edita

/etc/sysconfig/docker

Y añadir:

HTTP_PROXY="http://<proxy_host>:<proxy_port>" HTTPS_PROXY="https://<proxy_host>:<proxy_port>" http_proxy="${HTTP_PROXY}" https_proxy="${HTTPS_PROXY}"

Luego reinicie Docker:

sudo service docker restart

La fuente es esta entrada de blog .


Para resolver el problema con el rizo en la compilación de Docker, agregué lo siguiente dentro del Dockerfile:

ENV http_proxy=http://infoprx2:8080 ENV https_proxy=http://infoprx2:8080 RUN apt-get update && apt-get install -y curl vim

Tenga en cuenta que la instrucción ENV es ANTES de la instrucción RUN.

Y para hacer que el demonio Docker pueda acceder a Internet (yo uso Kitematic con boot2docker), agregué lo siguiente en /var/lib/boot2docker/profile :

export HTTP_PROXY=http://infoprx2:8080 export HTTPS_PROXY=http://infoprx2:8080

Luego reinicié Docker con sudo /etc/init.d/docker restart .


Prueba esto:

sudo HTTP_PROXY=http://<IP address of proxy server:port> docker -d &


Si está utilizando el nuevo Docker para Mac (o Docker para Windows ), simplemente haga clic con el botón derecho en el icono de la bandeja de Docker y seleccione Preferencias (Windows: Configuración), luego vaya a Avanzado, y debajo de Proxies especifique su configuración de proxy allí. Haga clic en Aplicar y Reiniciar y espere hasta que Docker se reinicie.


Si estás en Ubuntu, debes ejecutar este comando:

export https_proxy=http://your_name:password@ip_proxy:port docker

Y recargue Docker con:

service docker.io restart

O vaya a /etc/docker.io con nano ...


Si estás en Ubuntu, ejecuta estos comandos para agregar tu proxy.

sudo nano /etc/default/docker

Y descomenta las líneas que especifica.

#export http_proxy = http://username:[email protected]:8050

Y reemplácelo con su servidor proxy y nombre de usuario apropiados.

Luego reinicie Docker usando:

service docker restart

Ahora puedes ejecutar los comandos de Docker detrás del proxy:

docker search ubuntu


Si uso el proxy socks5, aquí está mi prueba con Docker 17.03.1-ce con la configuración "all_proxy", y funcionó:

# Set up socks5 proxy server ssh sshUser@proxyServer -C -N -g -D / proxyServerIp:9999 / -o ExitOnForwardFailure=yes / -o ServerAliveInterval=60 # Configure dockerd and restart. # NOTICE: using "all_proxy" mkdir -p /etc/systemd/system/docker.service.d cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF [Service] Environment="all_proxy=socks5://proxyServerIp:9999" Environment="NO_PROXY=localhost,127.0.0.1,private.docker.registry.com" EOF systemctl daemon-reload systemctl restart docker # Test whether can pull images docker run -it --rm alpine:3.5


Su configuración de proxy APT no está relacionada con Docker.

Docker usa la variable de entorno HTTP_PROXY si está presente, por ejemplo:

sudo HTTP_PROXY=http://192.168.1.1:3128/ docker pull busybox

Pero en su lugar, le sugiero que eche un vistazo a su archivo de configuración /etc/default/docker : debe tener una línea para eliminar comentarios (y quizás ajustar) para que su configuración de proxy se aplique automáticamente. Luego reinicie el servidor Docker:

service docker restart


Tal vez necesite configurar variables en minúsculas. En mi caso, mi archivo /etc/systemd/system/docker.service.d/http-proxy.conf tiene este aspecto:

[Service] Environment="ftp_proxy=http://<user>:<password>@<proxy_ip>:<proxy_port>/" Environment="http_proxy=http://<user>:<password>@<proxy_ip>:<proxy_port>/" Environment="https_proxy=http://<user>:<password>@<proxy_ip>:<proxy_port>/"

¡Buena suerte! :)