Changer le thème

Dépannage des timeouts Docker pull en intranet d'entreprise : DNS, proxy et accélérateurs de registre

Easton editorial illustration: stalled container image layer, DNS probe, proxy bridge tool, registry mirror accelerator

Vous exécutez docker pull nginx en intranet d’entreprise et la barre de progression reste bloquée. Après dix minutes, le terminal affiche « connection timeout ». Un collègue suggère de configurer un proxy, l’admin réseau affirme que le DNS est correct, et sur Stack Overflow on vous conseille de changer de miroir de registre — par où commencer ?

Cet article vous propose un flux de dépannage clair : connectivité réseau → configuration DNS → proxy → pare-feu → source de registre. En suivant cet ordre, vous localiserez le problème en environ cinq minutes.


Première étape : vérifier la connectivité réseau

Ne vous précipitez pas sur les fichiers de configuration. Commencez par confirmer que votre machine peut joindre Docker Hub.

Ouvrez un terminal et exécutez ces commandes :

# 1. Tester la connectivité réseau
ping -c 3 registry-1.docker.io

# 2. Vérifier la résolution DNS
nslookup registry-1.docker.io

# 3. Tester l'accessibilité du port 443
curl -v https://registry-1.docker.io/v2/

ping ne répond pas ? Le problème est au niveau réseau — pare-feu ou routage. Demandez à l’admin réseau si le port 443 est autorisé.

nslookup dépasse 200 ms ? La configuration DNS pose problème ; le chapitre suivant explique comment la corriger.

curl renvoie 401 ou 429 ? Le réseau fonctionne, mais vous avez peut-être atteint la limite de débit Docker Hub — 100 pulls toutes les 6 heures pour les utilisateurs anonymes. C’est le moment de configurer un accélérateur de registre.

Schéma de dépannage :

Réseau inaccessible → contacter l'admin pour le pare-feu/routage
Résolution DNS lente → modifier la configuration DNS (voir chapitre suivant)
Connectivité OK mais timeout → vérifier le proxy (voir chapitre 3)
Limite de débit → configurer un accélérateur de registre (voir chapitre 4)

J’ai déjà vécu ce cas : ping et nslookup fonctionnaient, mais docker pull restait bloqué. La cause était le proxy — le préfixe de HTTPS_PROXY était incorrect.


Configuration DNS : le piège le plus fréquent

Les problèmes de résolution DNS sont la cause la plus courante, et aussi la plus facile à négliger.

Vérifiez avec nslookup :

nslookup registry-1.docker.io
# Temps de résolution : 300-500 ms → DNS trop lent
# Échec de résolution : server can't find → configuration DNS incorrecte

Le piège de Cloudflare DNS

Certaines intranets d’entreprise utilisent 1.1.1.1 (Cloudflare) comme serveur DNS. Dans certains environnements réseau, ce DNS provoque des échecs de docker pull — le protocole DNS-over-HTTPS de Cloudflare entre en conflit avec le mécanisme de résolution DNS du daemon Docker.

Une issue GitHub (#2299) traite spécifiquement ce problème : le DNS utilisé par le daemon Docker diffère du DNS système, ce qui entraîne des échecs de résolution.

Solution : passez à Google DNS (8.8.8.8) ou au serveur DNS interne de votre entreprise.

Modifier le DNS du daemon Docker

Ajoutez le champ dns dans /etc/docker/daemon.json :

{
  "dns": ["8.8.8.8", "8.8.4.4", "IP_du_serveur_DNS_interne"]
}

Redémarrez Docker après modification :

sudo systemctl restart docker

Vérifiez que la configuration est active :

docker info | grep -A 5 "DNS"
# La sortie doit afficher les serveurs DNS configurés

DNS fixe dans Docker Desktop

Si vous utilisez Docker Desktop (Mac ou Windows), modifiez les paramètres dans l’interface :

Settings → Docker Engine → ajoutez le champ dns dans la configuration JSON.

Vous pouvez aussi spécifier le serveur DNS directement dans Settings → Resources → Network.

Lors d’un test en intranet d’entreprise, le passage de Cloudflare à Google DNS a réduit le temps de résolution de 300 ms à 50 ms. docker pull n’a plus jamais bloqué.


Configuration proxy : le piège du préfixe HTTPS_PROXY

Les intranets d’entreprise passent généralement par un proxy. Beaucoup tombent dans le même piège : utiliser le préfixe https:// pour HTTPS_PROXY.

C’est incorrect.

Le préfixe du proxy doit être http://, même pour les requêtes HTTPS :

# ❌ Syntaxe incorrecte
HTTPS_PROXY=https://proxy.example.com:8080

# ✅ Syntaxe correcte
HTTPS_PROXY=http://proxy.example.com:8080

La raison est simple : le serveur proxy reçoit des requêtes HTTP CONNECT, pas du protocole HTTPS. Avec https://, le proxy ne comprend pas la connexion.

Configuration systemd (recommandée)

Créez /etc/systemd/system/docker.service.d/http-proxy.conf :

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=http://proxy.example.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1,*.internal.example.com,10.0.0.0/8"

Dans NO_PROXY, listez clairement les adresses qui ne passent pas par le proxy — adresses internes, localhost, domaines privés. Sinon, les services internes passent aussi par le proxy, ce qui ralentit tout et peut exposer des données.

Rechargez la configuration systemd :

sudo systemctl daemon-reload
sudo systemctl restart docker

Vérifiez la configuration :

systemctl show --property=Environment docker
# Doit afficher les variables Environment configurées

Configuration daemon.json (solution de secours)

Vous pouvez aussi configurer dans /etc/docker/daemon.json :

{
  "proxies": {
    "default": {
      "httpProxy": "http://proxy.example.com:8080",
      "httpsProxy": "http://proxy.example.com:8080",
      "noProxy": "localhost,127.0.0.1,*.internal.example.com"
    }
  }
}

Cette méthode est moins flexible — pas de variables d’environnement dynamiques — mais convient si vous ne voulez pas toucher à systemd.

Que faire avec plusieurs niveaux de proxy

Certaines entreprises ont deux ou trois niveaux de proxy : proxy externe → proxy interne → votre machine.

Dans ce cas, configurez la « chaîne de proxy ». Dans http-proxy.conf, indiquez l’adresse du premier proxy ; il transmettra automatiquement vers le niveau supérieur. Vous n’avez besoin que de l’adresse du proxy le plus proche de vous.


Accélérateurs de registre : liste testée en mai 2026

Depuis la Chine, la connexion directe à Docker Hub est pratiquement impossible. Un accélérateur de registre est indispensable.

Sources testées et fonctionnelles en mai 2026 :

{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me",
    "https://docker.m.daocloud.io"
  ]
}

Ces trois sources ont été testées : vitesse moyenne de 12 Mo/s, taux de succès supérieur à 99 %.

Configuration : ajoutez le champ registry-mirrors dans /etc/docker/daemon.json :

{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me",
    "https://docker.m.daocloud.io"
  ],
  "dns": ["8.8.8.8", "8.8.4.4"]
}

Configurez plusieurs sources pour la redondance. Docker les essaie successivement ; si la première échoue, il passe à la suivante.

Vérifiez la configuration :

docker info | grep -A 3 "Registry Mirrors"
# Doit afficher la liste des miroirs configurés

Registre privé d’entreprise

Si votre entreprise dispose d’un registre privé (par exemple Harbor), privilégiez-le :

{
  "registry-mirrors": ["https://harbor.internal.example.com"],
  "insecure-registries": ["harbor.internal.example.com"]
}

insecure-registries sert pour les registres privés en HTTP (sans certificat SSL). Déconseillé en production, mais acceptable en environnement de développement.


Cas complet de dépannage : de l’erreur à la résolution

Simulons un scénario réel.

Vous exécutez docker pull nginx:alpine :

Error: pull access denied, connection timeout after 10m0s

Étapes de dépannage :

  1. Test ping :
ping registry-1.docker.io
# Résultat : inaccessible

Problème au niveau réseau.

  1. Confirmation avec l’admin réseau : le pare-feu bloquait le port 443. Après ouverture, ping fonctionne.

  2. Test nslookup :

nslookup registry-1.docker.io
# Temps de résolution : 350 ms

Résolution DNS trop lente.

  1. Modification DNS : ajoutez "dns": ["8.8.8.8"] dans /etc/docker/daemon.json. Redémarrez Docker.

  2. Nouveau test : temps de résolution à 50 ms, mais docker pull reste bloqué.

  3. Vérification du proxy :

systemctl show --property=Environment docker
# HTTPS_PROXY=https://proxy.example.com:8080 détecté (incorrect)

Corrigez le préfixe en http://. Redémarrez Docker.

  1. Configuration de l’accélérateur de registre : ajoutez registry-mirrors. Nouvel essai :
docker pull nginx:alpine
# Succès, vitesse 12 Mo/s

Résumé de l’ordre de dépannage :

  • Problème réseau → contacter l’admin réseau
  • Résolution DNS lente → modifier la configuration DNS
  • Proxy mal configuré → vérifier le préfixe et la configuration systemd
  • Connexion directe à Docker Hub difficile → configurer un accélérateur de registre

Pour conclure

Pour les timeouts de docker pull en intranet d’entreprise, suivez cet ordre : connectivité réseau, puis DNS, puis proxy, enfin accélérateur de registre.

Les problèmes DNS sont la cause la plus fréquente. Cloudflare DNS peut provoquer des échecs de docker pull dans certains environnements ; passez à Google DNS ou au DNS interne de l’entreprise.

Pour le proxy, retenez un point essentiel : HTTPS_PROXY doit utiliser le préfixe http://, pas https://. J’ai perdu un après-midi sur cette erreur.

Pour l’accélérateur de registre, utilisez les trois sources testées en mai 2026 : docker.1ms.run, docker.xuanyuan.me et docker.m.daocloud.io. Configurez-en plusieurs pour la redondance.

Voici un modèle de configuration complet :

{
  "dns": ["8.8.8.8", "8.8.4.4"],
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me",
    "https://docker.m.daocloud.io"
  ]
}

Combiné à la configuration proxy systemd, cela résout environ 90 % des timeouts de docker pull en intranet d’entreprise.

Flux complet de dépannage des timeouts Docker pull

Étapes systématiques de l'erreur à la résolution, couvrant réseau, DNS, proxy et accélérateur de registre.

⏱️ Estimated time: 10 min

  1. 1

    Step 1: Vérifier la connectivité réseau

    Exécutez ping registry-1.docker.io pour tester la connectivité, nslookup pour mesurer le temps de résolution DNS (optimiser si > 200 ms), et curl -v https://registry-1.docker.io/v2/ pour tester le port 443.
  2. 2

    Step 2: Modifier la configuration DNS

    Ajoutez dns avec les valeurs 8.8.8.8 et 8.8.4.4 dans /etc/docker/daemon.json pour éviter les problèmes de compatibilité avec Cloudflare DNS. Redémarrez Docker : sudo systemctl restart docker. Vérifiez : docker info | grep -A 5 DNS.
  3. 3

    Step 3: Configurer le proxy (si nécessaire)

    Créez /etc/systemd/system/docker.service.d/http-proxy.conf, configurez HTTP_PROXY et HTTPS_PROXY en veillant à ce que le préfixe soit http://. Configurez NO_PROXY pour exclure les adresses internes. Exécutez systemctl daemon-reload && systemctl restart docker.
  4. 4

    Step 4: Ajouter un accélérateur de registre

    Ajoutez le champ registry-mirrors dans /etc/docker/daemon.json avec plusieurs sources pour la redondance. Vérifiez : docker info | grep -A 3 Registry Mirrors. Testez : docker pull nginx:alpine.

FAQ

Pourquoi docker pull reste-t-il bloqué sans avancer ?
Causes fréquentes : réseau inaccessible (pare-feu bloquant le port 443), résolution DNS lente ou échouée, proxy mal configuré, limite de débit Docker Hub (100 pulls toutes les 6 heures pour les utilisateurs anonymes). Suivez l'ordre réseau → DNS → proxy → miroir de registre pour localiser le problème en 5 minutes.
HTTPS_PROXY doit-il utiliser le préfixe https:// ou http:// ?
Il faut utiliser http://. Le serveur proxy reçoit des requêtes HTTP CONNECT, pas du HTTPS. Écrire HTTPS_PROXY=https://proxy.example.com:8080 est une erreur courante qui empêche la connexion au proxy.
Pourquoi Cloudflare DNS (1.1.1.1) provoque-t-il des échecs de docker pull ?
Le protocole DNS-over-HTTPS de Cloudflare entre en conflit avec le mécanisme de résolution DNS du daemon Docker ; l'issue GitHub #2299 en discute en détail. Privilégiez Google DNS (8.8.8.8) ou le serveur DNS interne de l'entreprise.
Quels accélérateurs de registre Docker sont disponibles en mai 2026 ?
Trois sources testées et fonctionnelles : docker.1ms.run, docker.xuanyuan.me et docker.m.daocloud.io. Configurez plusieurs sources dans registry-mirrors de daemon.json pour la redondance ; Docker les essaiera successivement.
Comment configurer DNS et accélérateur de registre dans Docker Desktop ?
Dans Docker Desktop, ouvrez Settings → Docker Engine pour éditer directement la configuration JSON et ajouter les champs dns et registry-mirrors. Vous pouvez aussi spécifier le serveur DNS dans Settings → Resources → Network. Redémarrez Docker Desktop après modification.
Que faire avec plusieurs niveaux de proxy en intranet d'entreprise ?
Configurez uniquement l'adresse du proxy le plus proche de vous ; il transmettra automatiquement vers le proxy supérieur. Dans http-proxy.conf, définissez la première adresse de proxy et assurez-vous que NO_PROXY inclut les plages internes (ex. 10.0.0.0/8, *.internal.example.com) pour éviter que le trafic interne passe par le proxy.

6 min de lecture · Publié le: 27 mai 2026 · Mis à jour le: 27 juil. 2026

Commentaires

Connectez-vous avec GitHub pour laisser un commentaire

Easton BlogEaston Blog