¿Cómo puedo permitir que todos mis contenedores Docker usen mi proxy?

¿Cómo puedo permitir que todos mis contenedores Docker usen mi proxy?

Estoy ejecutando Docker en Debian Jessie, que está detrás de un proxy corporativo. Para poder descargar imágenes de Docker, necesito agregar lo siguiente a mi/etc/defaults/docker

http_proxy="http://localhost:3128/"

Puedo confirmar que esto funciona.

Sin embargo, para poder acceder a interwebz desde mi contenedor, necesito iniciar todas las sesiones --net hosty luego configurar estas variables de entorno:

export http_proxy=http://localhost:3128/
export https_proxy=https://localhost:3128/
export ftp_proxy=${http_proxy}

Idealmente, me gustaría que el contenedor no necesitara la red del host y no conociera el proxy (es decir, todas las llamadas salientes al puerto 20, 80, 443 del contenedor pasan por el puerto proxy del host). ¿Es eso posible?

De lo contrario, ¿es posible tener una configuración del sitio que garantice que estas variables de entorno se establezcan localmente pero nunca se exporten como parte de una imagen?

ACTUALIZAR: Sé que puedo pasar estas cosas con --env http_proxy=...etc, pero eso es complicado. Quiero que funcione para todos los usuarios del sistema sin tener que utilizar alias.

Respuesta1

Ver esta respuesta SO:

El servidor host ejecuta un contenedor que ejecuta un proxy (squid, en este caso) que puede realizar un proxy transparente. Ese contenedor tiene algunas reglas de iptables que envían tráfico NAT al servidor proxy; esto significa que el contenedor debe ejecutarse en modo privilegiado.

El servidor host también contiene (y aquí está la magia) entradas de la tabla de rutas IP que redirigen todo el tráfico desde cualquier contenedor excepto el proxy que estaba destinado al puerto 80, a través del contenedor proxy.

Esto último esencialmente significa que para el tráfico del puerto 80, la ruta desde el contenedor al resto del mundo pasa por el contenedor proxy, dándole la oportunidad de NAT y proxy transparente.

https://github.com/silarsis/docker-proxy

Respuesta2

ElConfigurar el cliente DockerLa documentación oficial muestra cómo resolver fácilmente este problema.

Edite el archivo ~/.docker/config.json(o %USERPROFILE%\.docker\config.json) y agregue el siguiente fragmento JSON:

{
    "proxies": {
        "default": {
            "httpProxy": "http://localhost:3128",
            "httpsProxy": "https://localhost:3128"
        }
    }
}

Esto resolvió mi problema por el cual apt udpatefallaba la ejecución dentro de un contenedor acoplable de Debian. Después de agregar la configuración del proxy en ese archivo json e iniciar un nuevo contenedor acoplable apt updatecomenzó a funcionar.

información relacionada