Utiliser un serveur proxy avec la CLI Docker
Cette page décrit comment configurer la CLI Docker pour utiliser des proxies via des variables d'environnement dans les conteneurs.
Cette page ne décrit pas comment configurer des proxies pour Docker Desktop. Pour les instructions, voir configurer Docker Desktop pour utiliser des proxies HTTP/HTTPS.
Si vous exécutez Docker Engine sans Docker Desktop, référez-vous à
Configurer le daemon Docker pour utiliser un proxy
pour apprendre comment configurer un serveur proxy pour le daemon Docker (dockerd
) lui-même.
Si votre conteneur doit utiliser un serveur proxy HTTP, HTTPS ou FTP, vous pouvez le configurer de différentes manières :
NoteMalheureusement, il n'y a pas de standard qui définit comment les clients web doivent gérer les variables d'environnement proxy, ou le format pour les définir.
Si vous êtes intéressé par l'histoire de ces variables, consultez ce billet de blog sur le sujet, par l'équipe GitLab : Nous devons parler : Pouvons-nous standardiser NO_PROXY ?.
Configurer le client Docker
Vous pouvez ajouter des configurations proxy pour le client Docker en utilisant un fichier
de configuration JSON, situé dans ~/.docker/config.json
.
Les builds et conteneurs utilisent la configuration spécifiée dans ce fichier.
{
"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"
}
}
}
WarningLes paramètres proxy peuvent contenir des informations sensibles. Par exemple, certains serveurs proxy nécessitent que les informations d'authentification soient incluses dans leur URL, ou leur adresse peut exposer des adresses IP ou noms d'hôtes de l'environnement de votre entreprise.
Les variables d'environnement sont stockées en texte brut dans la configuration du conteneur, et en tant que telles peuvent être inspectées via l'API distante ou commitées dans une image lors de l'utilisation de
docker commit
.
La configuration devient active après avoir sauvegardé le fichier, vous n'avez pas besoin de redémarrer Docker. Cependant, la configuration ne s'applique qu'aux nouveaux conteneurs et builds, et n'affecte pas les conteneurs existants.
Le tableau suivant décrit les paramètres de configuration disponibles.
Propriété | Description |
---|---|
httpProxy |
Définit les variables d'environnement et arguments de build HTTP_PROXY et http_proxy . |
httpsProxy |
Définit les variables d'environnement et arguments de build HTTPS_PROXY et https_proxy . |
ftpProxy |
Définit les variables d'environnement et arguments de build FTP_PROXY et ftp_proxy . |
noProxy |
Définit les variables d'environnement et arguments de build NO_PROXY et no_proxy . |
allProxy |
Définit les variables d'environnement et arguments de build ALL_PROXY et all_proxy . |
Ces paramètres sont utilisés pour configurer les variables d'environnement proxy pour les conteneurs uniquement, et ne sont pas utilisés comme paramètres proxy pour la CLI Docker ou le moteur Docker lui-même. Référez-vous aux sections variables d'environnement et configurer le daemon Docker pour utiliser un serveur proxy pour configurer les paramètres proxy pour la CLI et le daemon.
Exécuter des conteneurs avec une configuration proxy
Lorsque vous démarrez un conteneur, ses variables d'environnement liées au proxy sont définies
pour refléter votre configuration proxy dans ~/.docker/config.json
.
Par exemple, en supposant une configuration proxy comme l'exemple montré dans la section précédente, les variables d'environnement pour les conteneurs que vous exécutez sont définies comme suit :
$ 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
Builder avec une configuration proxy
Lorsque vous invoquez un build, les arguments de build liés au proxy sont pré-populés automatiquement, basés sur les paramètres proxy dans votre fichier de configuration client Docker.
En supposant une configuration proxy comme l'exemple montré dans la section précédente, les variables d'environnement sont définies comme suit pendant les 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
Configurer les paramètres proxy par daemon
La clé default
sous proxies
dans ~/.docker/config.json
configure les
paramètres proxy pour tous les daemons auxquels le client se connecte.
Pour configurer les proxies pour des daemons individuels,
utilisez l'adresse du daemon au lieu de la clé default
.
L'exemple suivant configure à la fois une configuration proxy par défaut,
et un remplacement no-proxy pour le daemon Docker sur l'adresse
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"
}
}
}
Définir le proxy en utilisant la CLI
Au lieu de configurer le client Docker,
vous pouvez spécifier des configurations proxy en ligne de commande lorsque vous invoquez les
commandes docker build
et docker run
.
La configuration proxy en ligne de commande utilise le drapeau --build-arg
pour les builds,
et le drapeau --env
pour lorsque vous voulez exécuter des conteneurs avec un proxy.
$ docker build --build-arg HTTP_PROXY="http://proxy.example.com:3128" .
$ docker run --env HTTP_PROXY="http://proxy.example.com:3128" redis
Pour une liste de tous les arguments de build liés au proxy que vous pouvez utiliser avec la
commande docker build
, voir
ARGs prédéfinis.
Ces valeurs proxy ne sont disponibles que dans le conteneur de build.
Elles ne sont pas incluses dans la sortie du build.
Proxy comme variable d'environnement pour les builds
N'utilisez pas l'instruction ENV
du Dockerfile pour spécifier des paramètres proxy pour les builds.
Utilisez les arguments de build à la place.
L'utilisation de variables d'environnement pour les proxies intègre la configuration dans l'image. Si le proxy est un proxy interne, il pourrait ne pas être accessible pour les conteneurs créés à partir de cette image.
Intégrer les paramètres proxy dans les images pose aussi un risque de sécurité, car les valeurs peuvent inclure des informations sensibles.