Usar un servidor proxy con la CLI de Docker
Esta página describe cómo configurar la CLI de Docker para usar proxies a través de variables de entorno en los contenedores.
Esta página no describe cómo configurar proxies para Docker Desktop. Para obtener instrucciones al respecto, consulta configurar Docker Desktop para usar proxies HTTP/HTTPS.
Si ejecutas Docker Engine sin Docker Desktop, consulta
Configurar el demonio de Docker para usar un proxy para aprender a configurar un servidor proxy para el propio demonio de Docker (dockerd).
Si tu contenedor necesita utilizar un servidor proxy HTTP, HTTPS o FTP, puedes configurarlo de diferentes maneras:
NoteDesafortunadamente, no existe un estándar que defina cómo deben manejar los clientes web las variables de entorno de proxy, ni el formato para definirlas.
Si te interesa la historia de estas variables, echa un vistazo a este artículo de blog sobre el tema, escrito por el equipo de GitLab: We need to talk: Can we standardize NO_PROXY?.
Configure the Docker client
Puedes añadir configuraciones de proxy para el cliente de Docker utilizando un archivo de configuración JSON, ubicado en ~/.docker/config.json. Las builds y los contenedores utilizan la configuración especificada en este archivo.
{
"proxies": {
"default": {
"httpProxy": "http://proxy.example.com:3128",
"httpsProxy": "https://proxy.example.com:3129",
"noProxy": "*.test.example.com,.example.org,127.0.0.0/8"
}
}
}WarningLa configuración del proxy puede contener información confidencial. Por ejemplo, algunos servidores proxy requieren que se incluya información de autenticación en su URL, o su dirección puede exponer direcciones IP o nombres de host del entorno de tu empresa.
Las variables de entorno se almacenan como texto plano en la configuración del contenedor y, como tales, se pueden inspeccionar a través de la API remota o confirmarse (commit) en una imagen cuando se utiliza
docker commit.
La configuración se activa tras guardar el archivo, no necesitas reiniciar Docker. Sin embargo, la configuración solo se aplica a los nuevos contenedores y builds, y no afecta a los contenedores existentes.
La siguiente tabla describe los parámetros de configuración disponibles.
| Propiedad | Descripción |
|---|---|
httpProxy | Establece las variables de entorno y argumentos de compilación HTTP_PROXY y http_proxy. |
httpsProxy | Establece las variables de entorno y argumentos de compilación HTTPS_PROXY y https_proxy. |
ftpProxy | Establece las variables de entorno y argumentos de compilación FTP_PROXY y ftp_proxy. |
noProxy | Establece las variables de entorno y argumentos de compilación NO_PROXY y no_proxy. |
allProxy | Establece las variables de entorno y argumentos de compilación ALL_PROXY y all_proxy. |
Estos ajustes se utilizan para configurar las variables de entorno de proxy únicamente para los contenedores, y no se utilizan como ajustes de proxy para la CLI de Docker o el propio Docker Engine. Consulta las secciones de variables de entorno y configurar el demonio de Docker para usar un servidor proxy para configurar los ajustes de proxy para la CLI y el demonio.
Ejecutar contenedores con una configuración de proxy
Cuando inicias un contenedor, sus variables de entorno relacionadas con el proxy se configuran para reflejar tu configuración de proxy en ~/.docker/config.json.
Por ejemplo, asumiendo una configuración de proxy como el ejemplo mostrado en la sección anterior, las variables de entorno para los contenedores que ejecutas se configuran de la siguiente manera:
$ docker run --rm alpine sh -c 'env | grep -i _PROXY'
https_proxy=http://proxy.example.com:3129
HTTPS_PROXY=http://proxy.example.com:3129
http_proxy=http://proxy.example.com:3128
HTTP_PROXY=http://proxy.example.com:3128
no_proxy=*.test.example.com,.example.org,127.0.0.0/8
NO_PROXY=*.test.example.com,.example.org,127.0.0.0/8
Compilar con una configuración de proxy
Cuando invocas una compilación (build), los argumentos de compilación relacionados con el proxy se autocompletan automáticamente, según la configuración del proxy en el archivo de configuración de tu cliente de Docker.
Asumiendo una configuración de proxy como el ejemplo mostrado en la sección anterior, las variables de entorno se configuran de la siguiente manera durante las builds:
$ docker build \
--no-cache \
--progress=plain \
- <<EOF
FROM alpine
RUN env | grep -i _PROXY
EOF
#5 [2/2] RUN env | grep -i _PROXY
#5 0.100 HTTPS_PROXY=https://proxy.example.com:3129
#5 0.100 no_proxy=*.test.example.com,.example.org,127.0.0.0/8
#5 0.100 NO_PROXY=*.test.example.com,.example.org,127.0.0.0/8
#5 0.100 https_proxy=https://proxy.example.com:3129
#5 0.100 http_proxy=http://proxy.example.com:3128
#5 0.100 HTTP_PROXY=http://proxy.example.com:3128
#5 DONE 0.1s
Configurar los ajustes de proxy por demonio
La clave default bajo proxies en ~/.docker/config.json configura los ajustes de proxy para todos los demonios a los que se conecta el cliente. Para configurar los proxies para demonios individuales, utiliza la dirección del demonio en lugar de la clave default.
El siguiente ejemplo configura tanto una configuración de proxy predeterminada como una anulación de no-proxy para el demonio de Docker en la dirección tcp://docker-daemon1.example.com:
{
"proxies": {
"default": {
"httpProxy": "http://proxy.example.com:3128",
"httpsProxy": "https://proxy.example.com:3129",
"noProxy": "*.test.example.com,.example.org,127.0.0.0/8"
},
"tcp://docker-daemon1.example.com": {
"noProxy": "*.internal.example.net"
}
}
}Establecer el proxy utilizando la CLI
En lugar de configurar el cliente de Docker, puedes especificar las configuraciones de proxy en la línea de comandos al invocar los comandos docker build y docker run.
La configuración del proxy en la línea de comandos utiliza la bandera --build-arg para las builds, y la bandera --env para cuando quieras ejecutar contenedores con un proxy.
$ docker build --build-arg HTTP_PROXY="http://proxy.example.com:3128" .
$ docker run --env HTTP_PROXY="http://proxy.example.com:3128" redis
Para obtener una lista de todos los argumentos de compilación relacionados con el proxy que puedes utilizar con el comando docker build, consulta
ARGs predefinidos. Estos valores de proxy solo están disponibles en el contenedor de compilación. No se incluyen en la salida de la compilación.
Proxy como variable de entorno para las builds
No utilices la instrucción ENV del Dockerfile para especificar los ajustes de proxy para las builds. En su lugar, utiliza argumentos de compilación (build arguments).
El uso de variables de entorno para proxies incrusta la configuración en la imagen. Si el proxy es un proxy interno, es posible que no sea accesible para los contenedores creados a partir de esa imagen.
Incrustar la configuración de proxy en las imágenes también plantea un riesgo de seguridad, ya que los valores pueden incluir información confidencial.