In this Article
Les containers ont révolutionné le développement logiciel en résolvant de nombreuses difficultés rencontrées par les programmeurs. Ils permettent de livrer des produits fiables, qui fonctionnent de manière cohérente sur différents systèmes et appareils. Docker a porté les containers à un niveau supérieur en simplifiant et en accélérant considérablement leur création, leur gestion et leur exécution. Docker prend également en charge les proxies tiers et propose plusieurs manières de les configurer. Pourquoi l’associer à des IP alternatives, quelle méthode choisir selon votre situation et comment procéder étape par étape ? Lisez la suite pour le découvrir.
Pourquoi utiliser des proxies avec Docker
Pour garantir un accès à Internet stable, sécurisé et contrôlé. Parfois, il s’agit tout simplement de pouvoir y accéder.
Docker doit accéder au Web pour télécharger des images, installer des paquets, etc. Or, de nombreux réseaux d’entreprise n’offrent pas de connexion directe : le trafic sortant y est contrôlé ou restreint pour des raisons de sécurité, ce qui peut toutefois entraver le travail des développeurs. Les proxies autorisés sont parfois le seul moyen d’accéder à Internet et d’éviter des messages tels que “Connection timed out” ou “Unable to access www.example.com“.
De plus, certains réseaux exigent une authentification. Docker ne la prend pas lui-même en charge : un proxy externe constitue alors la solution.
Les applications en cours d’exécution peuvent elles aussi nécessiter une connexion externe. Un container peut devoir se connecter à des API cloud, à des bases de données ou à des services tiers. S’il est protégé par un pare-feu, un proxy est nécessaire pour atteindre les endpoints visés.
Les proxies peuvent également servir à d’autres fins. Faire passer le trafic par un serveur alternatif peut résoudre des problèmes de performances et faciliter sa surveillance, notamment pour la journalisation, la détection de malware ou l’inspection SSL. Ils contribuent aussi à la cohérence du réseau entre différents serveurs et machines, tout en masquant des informations internes, telles que l’adresse IP, les requêtes DNS internes et le NAT, afin de renforcer la sécurité.
Comment configurer des proxies dans Docker
Les proxies peuvent être configurés à quatre niveaux : le Docker Daemon, également appelé Docker Engine, le Docker Client, les containers et le système d’exploitation. Chaque niveau propose plusieurs méthodes et n’affecte pas les mêmes composants. Chaque option a ses avantages : choisissez celle qui convient à votre cas d’usage. Examinons-les une par une pour déterminer laquelle utiliser et comment procéder.
Couche 1 : Configurer le Docker Daemon
À ce niveau, les proxies contrôlent le téléchargement et l’envoi d’images, l’accès à Docker Hub et aux registres privés, ainsi que l’accès à Docker Swarm.
Quand choisir cette option :
- Vous avez besoin que toutes les opérations sur les images passent par un proxy ;
- Des commandes comme docker pull ou docker push échouent ;
- Vous devez faire passer tout le trafic de votre machine par un proxy d’entreprise ;
- L’accès au réseau externe n’est possible qu’avec des proxies ;
- Vous utilisez Docker Swarm.
Cette méthode est stable et prévisible. Avec Desktop, les proxies se configurent facilement depuis l’interface graphique. En revanche, dans les anciennes versions (< 17.x) et certaines configurations rares, ces réglages peuvent affecter tous les containers et ralentir ceux qui n’utilisent pas Internet. Dans les versions récentes, le proxy du Daemon n’affecte pas les containers, car ils n’héritent pas automatiquement de ses réglages.
Il existe quatre façons de configurer le proxy du Docker Daemon.
Méthode 1 – Utiliser daemon.json
Cette méthode est réservée à Linux et recommandée pour cet OS. Configurez le proxy dans le fichier daemon.json :
{
"proxies": {
"http-proxy": "http://proxy.example.com:3128",
"https-proxy": "https://proxy.example.com:3129",
"no-proxy": "*.test.example.com,.example.org,127.0.0.0/8"
}
}
Après avoir modifié le fichier, redémarrez Docker pour que les changements prennent effet :
sudo systemctl restart docker
Méthode 2 – Via un fichier drop-in systemd
Cette méthode ne fonctionne elle aussi que sous Linux. Elle est disponible en mode standard comme en mode rootless.
Dans tous les cas, commencez par créer un répertoire système :
sudo mkdir -p /etc/systemd/system/docker.service.d
Créez ensuite un fichier nommé /etc/systemd/system/docker.service.d/http-proxy.conf dans lequel vous définirez les variables d’environnement du proxy.
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128"
Si vous utilisez un proxy HTTPS, utilisez la variable “HTTPS_PROXY”. Vous pouvez définir plusieurs variables. Enregistrez ensuite le fichier et redémarrez Docker.
sudo systemctl daemon-reload
sudo systemctl restart docker
Méthode 3 – Utiliser des variables d’environnement pour dockerd
Le Docker Daemon lit les variables d’environnement avant de démarrer. Cette méthode n’est toutefois généralement pas à privilégier.
export HTTP_PROXY=...
dockerd
Méthode 4 – Docker Desktop
Techniquement, Docker Desktop s’appuie sur une machine virtuelle Linux légère pour configurer Docker. Il est souvent présenté comme disponible uniquement sur Windows et macOS. Il existe également sous Linux, mais cette option reste rare : le Daemon est alors géré dans une VM plutôt que par un moteur natif. Cette méthode convient donc surtout à Windows et macOS. Suivez ce chemin :
Docker Desktop > Settings > Resources > Proxies.
Couche 2 : Configurer les proxies du Docker Client (CLI)
Le Docker Client utilise des proxies pour envoyer des requêtes. Cela concerne les appels API effectués par la CLI et les commandes telles que docker login, docker pull, docker push.
Quand choisir cette option :
- Si vous avez besoin que le client s’authentifie via un proxy ;
- Quand l’entreprise impose des restrictions sur le trafic sortant ;
- Quand vous n’avez pas besoin d’affecter le daemon ou les containers.
Le Client se configure rapidement et facilement, sans avoir à redémarrer le Daemon. Cette méthode ne résout toutefois pas les problèmes d’accès lors du build ou de l’exécution des containers, ni les erreurs d’envoi et de téléchargement du Daemon.
En général, vous configurez le Docker Client à l’aide des variables d’environnement du shell.
Voici la configuration pour Linux et macOS :
export HTTP_PROXY=http://PROXY:PORT
Ou :
export HTTPS_PROXY=http://PROXY:PORT
Pour Windows, utilisez plutôt ceci :
setx HTTP_PROXY http://PROXY:PORT
Remarque : sous Windows, CMD peut poser problème. Utilisez PowerShell.
Il existe une autre méthode, rarement utilisée : la configuration commande par commande.
HTTP_PROXY=http://PROXY docker login
Couche 3 : Proxy du container
Avec cette méthode, les applications exécutées dans les containers utilisent des proxies. Vous pouvez les configurer pour les builds ou exécuter des containers avec des proxies.
Quand choisir cette option :
- Les containers ont besoin d’une connexion externe ;
- Les gestionnaires de paquets échouent lors des builds ;
- Les applications dans les containers doivent faire passer leurs requêtes API par un proxy externe.
Cette méthode se configure facilement container par container et convient aux environnements mixtes, où certains containers ont besoin de proxies et d’autres non. Elle sépare aussi clairement cette configuration de celle de l’OS et du Daemon. En revanche, les proxies doivent être configurés manuellement pour chaque build et chaque exécution. Cette option est moins adaptée aux déploiements à grande échelle et présente des risques de sécurité, car les identifiants du proxy peuvent fuiter.
Méthode 1 – Configurer les proxies par build
docker build \
--build-arg HTTP_PROXY=http://PROXY:PORT \
--build-arg HTTPS_PROXY=http://PROXY:PORT \
-t myimage .
Méthode 2 – Utiliser le Dockerfile
La directive ENV du Dockerfile ou les variables d’environnement intègrent vos réglages à l’image. Cette méthode présente des risques de sécurité et ne doit pas être utilisée pour les builds.
ENV HTTP_PROXY=http://PROXY:PORT
ENV HTTPS_PROXY=http://PROXY:PORT
Méthode 3 – Configurer les proxies par exécution
docker run \
-e HTTP_PROXY=http://PROXY:PORT \
-e HTTPS_PROXY=http://PROXY:PORT \
image
Méthode 4 – Opter pour Docker Compose
C’est une option sûre et recommandée :
environment:
HTTP_PROXY: http://PROXY:PORT
HTTPS_PROXY: http://PROXY:PORT
NO_PROXY: "localhost,127.0.0.1"
Remarque : la documentation officielle de Docker emploie le terme CLI pour deux concepts différents, ce qui peut prêter à confusion. Le proxy Docker CLI affecte le programme client. Les flags Docker CLI, eux, injectent les réglages de proxy dans les containers : ils affectent les containers, pas le client. Dans les deux cas, vous utilisez des outils en ligne de commande.
Couche 4 : Proxy du système d’exploitation
Vous pouvez configurer le système pour que tout le trafic de votre appareil passe par un serveur proxy. Cela affecte à la fois le Docker Daemon et le Docker Client et, parfois, les containers ainsi que les autres applications utilisées.
Quand utiliser cette option :
- L’entreprise exige l’utilisation de proxies au niveau du système ;
- Beaucoup d’applications en dehors de Docker ont aussi besoin de proxies.
Cette méthode est simple et rapide : vous configurez les proxies une seule fois, et ces réglages s’appliquent à la plupart des composants et des applications. Elle n’est toutefois pas spécifique à Docker et complique le débogage. De plus, les containers héritent rarement de ces réglages automatiquement ; vous devrez donc peut-être les configurer séparément.
Ici, vous trouverez des tutoriels pas à pas pour configurer des proxies sur différents OS, notamment macOS et Windows.
Vous pouvez aussi consulter la documentation officielle de Docker pour obtenir plus de détails sur chaque méthode et sur toutes les variables disponibles.
Configuration du proxy du Docker Daemon
Comment configurer le Docker Client
Configurer les changements de proxy dans Docker Desktop
Docker a-t-il des proxies internes ?
Docker propose un proxy HTTP(S) interne, uniquement destiné aux builds d’images. Cela peut prêter à confusion, car certains pensent alors que les proxies externes ne sont pas nécessaires.
Le proxy interne de BuildKit n’est utilisé que pour les builds. Il accélère les accès, résout les problèmes de DNS et empêche les réglages DNS de fuiter dans les builds. Il ne permet toutefois pas d’établir des connexions sortantes sécurisées et ne peut pas remplacer un proxy.
Problèmes de configuration courants et comment les résoudre
En raison des nombreuses couches de Docker, résoudre les erreurs liées aux proxies peut s’avérer délicat. Voici cinq problèmes fréquents et leurs solutions.
Erreur 1 : docker pull/docker push échoue
Si le téléchargement via le proxy se bloque, expire ou est refusé, le Docker Daemon ne connaît probablement pas votre proxy. Configurez les proxies au niveau du moteur pour résoudre ce problème.
Erreur 2 : Pas de connexion, même si le Daemon fonctionne
Si docker pull fonctionne alors que les containers ne peuvent pas exécuter pip install ni installer d’autres dépendances, des erreurs telles que Temporary failure resolving peuvent survenir. Ce cas se présente avec les versions récentes de Docker, car le proxy du Daemon ne s’applique pas automatiquement aux containers. Configurez un proxy au niveau du container dans le Dockerfile ou Docker Compose.
Erreur 3 : La variable NO_PROXY ne fonctionne pas
Si Docker tente toujours de faire passer le trafic par des proxies malgré vos réglages, si les containers ne parviennent pas à communiquer ou si les miroirs de registre échouent, la syntaxe est peut-être incorrecte. Utilisez des entrées séparées par des virgules et n’indiquez pas de protocole pour les domaines.
NO_PROXY=localhost,127.0.0.1,.corp.example.com,registry.internal
Erreur 4 : Les identifiants du proxy contiennent des symboles non pris en charge
Dans ce cas, Docker peut ne pas démarrer ou ne pas parvenir à faire passer le trafic par des proxies. Vous devez encoder dans l’URL les caractères tels que @, #, %, :
Voici le résultat :
Environment=”HTTP_PROXY=http://user:Pa%%23ss@proxy:8080″
Erreur 5 : Docker ignore les réglages de proxy de Desktop
Si vous définissez des proxies dans Desktop, mais que les builds échouent et que les containers ne peuvent pas établir de connexion, utilisez peut-être une autre option de configuration. Desktop affecte le Daemon, mais pas directement les containers. Essayez de définir des proxies au niveau du container.
Pour résumer
Docker et les proxies forment une combinaison puissante, synonyme de rapidité, de sécurité et de déploiements efficaces. Pour en tirer le meilleur parti, choisissez une configuration adaptée et des proxies de haute qualité, obtenus légalement. DataImpulse vous accompagne avec plus de 90 millions de proxies issus de sources éthiques et un support humain disponible 24/7 pour vos tâches de développement. Écrivez-nous à [email protected] ou cliquez sur le bouton “Try Now” pour commencer. Cliquez sur “Try now” ou contactez-nous à [email protected] pour commencer.
