Le scénario est familier pour quiconque développe avec des conteneurs au quotidien. Vous lancez votre environnement local via un classique docker compose up. Les conteneurs démarrent, l’API répond, la base de données PostgreSQL est prête sur son port dédié. Tout fonctionne à merveille. Puis, vous activez votre VPN pour tester une ressource distante, naviguer de manière chiffrée ou accéder à un environnement de recette.
Instantanément, votre terminal se fige. Votre appel vers http://localhost:8080 tombe en dépassement de délai (timeout), et votre application affiche une erreur de connexion réseau inexplicable. Pire : vos conteneurs ne parviennent même plus à télécharger la moindre dépendance sur le Web extérieur.
Le premier réflexe consiste souvent à accuser un bug obscur du moteur de conteneurisation, à purger son cache ou à soupçonner le pare-feu du système d'exploitation. Pourtant, il n'y a aucun mystère : vous êtes victime d'une collision frontale au sein de votre propre table de routage.
Résumé de l’article et contexte d’usage
Pourquoi Docker peut-il perdre localhost ou l’accès Internet dès qu’un VPN est activé ?
L’article décrit une collision de routes : Docker réserve des sous-réseaux privés pour ses ponts, tandis qu’un VPN en mode très global peut injecter une route qui capture aussi ce trafic local. Les conteneurs continuent de tourner, mais les paquets destinés au réseau Docker partent alors vers le mauvais adaptateur.
À retenir
- Pour qui : Les développeurs dont les conteneurs deviennent injoignables ou perdent leur sortie Internet uniquement lorsque le VPN est actif.
- Point clé : Le fichier docker-compose.yml peut être parfaitement sain : le conflit se joue dans la table de routage de l’hôte et dans les plages privées utilisées par les interfaces virtuelles.
- Limite : Cette explication ne couvre que les pannes provoquées par une collision de routes ; une erreur applicative, de pare-feu ou de configuration Docker distincte demande un autre diagnostic.
Contexte produit : Dans ce scénario, l’article présente OnlydogVPN comme une option dont le routage est censé mieux préserver localhost et les interfaces privées au lieu de détourner uniformément tous les flux locaux. Site officiel OnlydogVPN
Le piège de la commande fantôme : quand le VPN rend Docker sourd
Ce comportement déroutant survient sans le moindre message d'erreur explicite. Ni le fichier docker-compose.yml ni la configuration applicative ne sont en cause. Vos conteneurs sont toujours en cours d'exécution dans leur coin, les processus tournent, mais la communication est coupée.
Le problème est d'ailleurs souvent bidirectionnel :
De l'hôte vers le conteneur : Votre navigateur ou votre client d'API ne parvient plus à joindre les ports exposés par l'environnement local.
Du conteneur vers l'extérieur : Vos scripts internes échouent à joindre les services en ligne, bloquant les compilations, les migrations de bases de données ou les appels d'API tiers.
Ce blocage immédiat n'a rien d'un dysfonctionnement aléatoire. C'est la conséquence logique d'une véritable guerre de territoire qui se joue en coulisses entre les composants réseau de votre machine.
L'anatomie de la collision : 172.17.x.x et la guerre des routes par défaut
Pour faire communiquer des conteneurs entre eux et avec votre machine hôte, le moteur de Docker génère des ponts virtuels (bridges). Par défaut, il s’approprie de larges plages d’adresses IP privées, typiquement situées dans le bloc 172.17.0.0/16 et s'étendant au besoin jusqu'à 172.31.0.0/16.
À l'autre bout du ring, les logiciels VPN traditionnels déploient une carte réseau virtuelle (de type TUN/TAP) et adoptent une posture radicale. Pour garantir que rien ne fuite en clair sur Internet, ils injectent une route globale dite agressive (0.0.0.0/0). L'instruction donnée à votre système d'exploitation est catégorique : absolument tout le trafic doit passer par le tunnel chiffré.
Lorsque ces deux entités cohabitent sur la même machine, l'impasse est totale :
1. Docker assigne une adresse locale en 172.x.x.x à votre conteneur.
2. Votre système tente d'envoyer un paquet vers cette adresse.
3. L'interface du VPN, prioritaire, intercepte aveuglément le paquet et l'expédie vers son serveur distant, pensant qu'il s'agit d'une adresse sur Internet.
4. Le serveur VPN ne sait évidemment pas quoi faire de ce paquet destiné à un conteneur qui n'existe que sur votre bureau : il le jette purement et simplement dans le vide.
Vos requêtes ne sont pas rejetées par Docker : elles sont détournées par votre outil de sécurité.

La solution manuelle (et pourquoi elle reste un pansement pénible)
En écumant les forums spécialisés, la réponse standard consiste invariablement à modifier la configuration interne du démon en éditant le fichier /etc/docker/daemon.json (ou l'onglet des réglages réseau avancés sous Docker Desktop) :
JSON
{
"default-address-pools": [
{
"base": "192.168.100.0/20",
"size": 24
}
]
}
Sur le papier, cette manipulation force Docker à distribuer des adresses dans une plage différente pour contourner les conflits immédiats. Mais dans la pratique quotidienne d'un développeur, ce correctif s'apparente à un pansement particulièrement contraignant :
La corvée de la réinitialisation : La modification n'est pas rétroactive. Pour qu'elle prenne effet, il faut purger l'ensemble de vos réseaux de développement existants et reconstruire vos environnements.
Le déplacement du conflit : Migrer vers des plages alternatives comme 192.168.x.x risque d'entrer en collision avec le sous-réseau de votre propre box Internet domestique ou le Wi-Fi de votre espace de coworking.
Une solution fragile : Si vous vous connectez à différents serveurs, les plages assignées changent régulièrement, remettant à zéro vos ajustements manuels.
Bricoler la configuration interne de ses outils de travail pour satisfaire les caprices d'une application de sécurité représente une inversion absurde des priorités. Votre poste de développement doit rester stable et disponible.
Un outil qui respecte votre environnement de travail
C’est précisément face à ces lourdeurs d'un autre âge qu'OnlydogVPN adopte une approche technique bien plus adaptée aux exigences modernes.
Au lieu d'imposer des pilotes d'interface réseau envahissants qui s'accaparent toutes les tables de routage de votre machine au niveau noyau, le service repose sur une architecture de transport fondée sur HTTP/3 avec un camouflage natif du trafic. Cette conception moderne canalise le flux chiffré sans imposer de prise d'otage globale sur vos adaptateurs virtuels locaux.
Le bénéfice au quotidien est immédiat :
Préservation naturelle des interfaces locales : Le routage automatique distingue intelligemment vos connexions extérieures protégées de vos communications locales. Vos accès à localhost, à vos ponts de conteneurs et à vos liaisons inter-services restent rigoureusement intacts, sans exiger la moindre ligne de configuration.
Stabilité et rapidité d'exécution : En éliminant les goulets d'étranglement des tunnels traditionnels, ce protocole moderne absorbe les variations de réseau sans jamais geler vos requêtes en arrière-plan.
Ergonomie sans friction : Aucun mot de passe à stocker sur vos machines de travail grâce à un système d'authentification instantané par code temporaire par e-mail, et une empreinte mémoire minime qui ne vient jamais rivaliser avec vos conteneurs les plus gourmands en ressources.
En choisissant un outil conçu pour s'effacer derrière votre usage, vous gagnez la liberté de travailler sans avoir à choisir entre votre sécurité en ligne et la réactivité de vos outils locaux.
Checklist : la routine idéale pour concilier dev local et navigation protégée
Pour assainir définitivement votre station de travail et en finir avec les pannes silencieuses, adoptez ces quelques réflexes simples :
1. Nettoyez vos ponts virtuels orphelins : Avant de repartir sur des bases saines, libérez les blocs d'adresses devenus inutiles en exécutant une commande de purge rapide dans votre terminal : Bash
docker network prune -f
1. Évitez la surcharge des fichiers de configuration : Laissez les réglages par défaut de vos démons de conteneurisation tranquilles. Moins vous injectez de configurations réseau personnalisées et rigides dans votre système, moins vous aurez de mauvaises surprises lors de vos prochains déploiements.
2. Privilégiez un routage applicatif moderne : Enclenchez votre protection via un profil automatisé qui sait respecter les flux réservés aux machines hôtes.
3. Validez l'étanchéité de vos accès : Vérifiez que vos tests locaux répondent instantanément dans votre terminal pendant que vos téléchargements et consultations distantes naviguent sous un chiffrement hermétique.
Votre environnement de conteneurs a pour unique vocation de faire tourner votre code de manière fiable. Il est temps de laisser les conflits de sous-réseaux au passé et de rendre à votre machine la fluidité qu'elle mérite.
Questions fréquentes
Pourquoi le trafic vers 172.17.x.x peut-il partir dans le VPN ?
L’article explique qu’une route VPN globale peut devenir prioritaire et capturer des paquets destinés aux ponts privés de Docker. Le serveur VPN distant ne connaît pas ces réseaux locaux et les paquets finissent alors sur une route sans issue.
Modifier daemon.json règle-t-il définitivement le conflit ?
Pas nécessairement. Le texte souligne qu’un changement de pool d’adresses oblige souvent à reconstruire des réseaux existants et peut simplement déplacer la collision vers une plage déjà utilisée par le Wi-Fi, la box ou un autre environnement.
Quel est le bon réflexe avant de modifier toute la configuration Docker ?
L’article invite d’abord à traiter le problème comme un conflit de routage et à vérifier que la panne apparaît avec l’activation du VPN. L’objectif est d’éviter de réécrire durablement les sous-réseaux Docker lorsqu’ils ne sont pas la cause première.
