Explorer les fonctionnalités réseau sur Docker Desktop
Docker Desktop inclut des capacités réseau intégrées pour vous aider à connecter les conteneurs avec les services sur votre hôte, entre conteneurs, ou via des proxies et VPN.
Fonctionnalités réseau pour toutes les plateformes
Passthrough VPN
Le réseau Docker Desktop peut fonctionner lorsqu'il est connecté à un VPN. Pour ce faire, Docker Desktop intercepte le trafic des conteneurs et l'injecte dans l'hôte comme s'il provenait de l'application Docker.
Mappage de port
Lorsque vous exécutez un conteneur avec l'argument -p
, par exemple :
$ docker run -p 80:80 -d nginx
Docker Desktop rend tout ce qui s'exécute sur le port 80
dans le conteneur, dans
ce cas, nginx
, disponible sur le port 80
de localhost
. Dans cet exemple, les
ports hôte et conteneur sont identiques.
Pour éviter les conflits avec des services utilisant déjà le port 80
sur l'hôte :
$ docker run -p 8000:80 -d nginx
Maintenant les connexions à localhost:8000
sont envoyées au port 80
dans le conteneur.
TipLa syntaxe pour
-p
estPORT_HÔTE:PORT_CLIENT
.
Support proxy HTTP/HTTPS
Voir Proxies
Support proxy SOCKS5
SOCKS (Socket Secure) est un protocole qui facilite le routage des paquets réseau entre un client et un serveur via un serveur proxy. Il fournit un moyen d'améliorer la confidentialité, la sécurité et les performances réseau pour les utilisateurs et applications.
Vous pouvez activer le support proxy SOCKS pour permettre les requêtes sortantes, telles que tirer des images, et accéder aux IP du backend de conteneurs Linux depuis l'hôte.
Pour activer et configurer le support proxy SOCKS :
- Naviguez vers l'onglet Ressources dans Paramètres.
- Dans le menu déroulant sélectionnez Proxies.
- Activez le bouton Configuration proxy manuelle.
- Dans la zone Serveur Web Sécurisé HTTPS, collez votre URL
socks5://host:port
.
Mode réseau et comportement DNS pour Mac et Windows
Avec Docker Desktop version 4.42 et ultérieures, vous pouvez personnaliser comment Docker gère le réseau de conteneurs et la résolution DNS pour mieux supporter une gamme d'environnements — des systèmes IPv4 uniquement aux systèmes dual-stack et IPv6 uniquement. Ces paramètres aident à prévenir les timeouts et problèmes de connectivité causés par des réseaux hôtes incompatibles ou mal configurés.
NoteCes paramètres peuvent être surchargés par réseau en utilisant des flags CLI ou des options de fichier Compose.
Mode réseau par défaut
Choisissez le protocole IP par défaut utilisé lorsque Docker crée de nouveaux réseaux. Cela vous permet d'aligner Docker avec les capacités réseau de votre hôte ou les exigences organisationnelles, telles qu'imposer l'accès IPv6 uniquement.
Les options disponibles sont :
- Dual IPv4/IPv6 (Par défaut) : Supporte à la fois IPv4 et IPv6. Le plus flexible et idéal pour les environnements avec réseau dual-stack.
- IPv4 uniquement : Seules les adresses IPv4 sont utilisées. Utilisez ceci si votre hôte ou réseau ne supporte pas IPv6.
- IPv6 uniquement : Seules les adresses IPv6 sont utilisées. Meilleur pour les environnements en transition vers ou imposant la connectivité IPv6 uniquement.
NoteCe paramètre peut être surchargé par réseau en utilisant des flags CLI ou des options de fichier Compose.
Comportement de résolution DNS
Contrôlez comment Docker filtre les enregistrements DNS retournés aux conteneurs, améliorant la fiabilité dans les environnements où seuls IPv4 ou IPv6 sont supportés. Ce paramètre est particulièrement utile pour empêcher les applications d'essayer de se connecter en utilisant des familles IP qui ne sont en fait pas disponibles, ce qui peut causer des délais ou échecs évitables.
Selon votre mode réseau sélectionné, les options disponibles sont :
- Auto (recommandé) : Docker détecte la pile réseau de votre hôte et filtre automatiquement les types d'enregistrements DNS non supportés (A pour IPv4, AAAA pour IPv6).
- Filtrer IPv4 (enregistrements A) : Empêche les conteneurs de résoudre les adresses IPv4. Disponible uniquement en mode dual-stack.
- Filtrer IPv6 (enregistrements AAAA) : Empêche les conteneurs de résoudre les adresses IPv6. Disponible uniquement en mode dual-stack.
- Pas de filtrage : Docker retourne tous les enregistrements DNS (A et AAAA), indépendamment du support hôte.
ImportantChanger le mode réseau par défaut remet le filtre DNS sur Auto.
Utiliser la gestion des paramètres
Si vous êtes administrateur, vous pouvez utiliser la
gestion des paramètres pour imposer ce paramètre Docker Desktop à travers les machines de vos développeurs. Choisissez parmi les extraits de code suivants et ajoutez-le à votre fichier admin-settings.json
.
Dual IPv4/IPv6 :
{
"defaultNetworkingMode": {
"locked": true
"value": "dual-stack"
}
}
IPv4 uniquement :
{
"defaultNetworkingMode": {
"locked": true
"value": "ipv4only"
}
}
IPv6 uniquement :
{
"defaultNetworkingMode": {
"locked": true
"value": "ipv6only"
}
}
Filtre auto :
{
"dnsInhibition": {
"locked": true
"value": "auto"
}
}
Filtrer IPv4 :
{
"dnsInhibition": {
"locked": true
"value": "ipv4"
}
}
Filtrer IPv6 :
{
"dnsInhibition": {
"locked": true
"value": "ipv6"
}
}
Pas de filtre :
{
"dnsInhibition": {
"locked": true
"value": "none"
}
}
Fonctionnalités réseau pour Mac et Linux
Transfert d'agent SSH
Docker Desktop pour Mac et Linux vous permet d'utiliser l'agent SSH de l'hôte à l'intérieur d'un conteneur. Pour ce faire :
-
Bind montez le socket de l'agent SSH en ajoutant le paramètre suivant à votre commande
docker run
:$--mount type=bind,src=/run/host-services/ssh-auth.sock,target=/run/host-services/ssh-auth.sock
-
Ajoutez la variable d'environnement
SSH_AUTH_SOCK
dans votre conteneur :$ -e SSH_AUTH_SOCK="/run/host-services/ssh-auth.sock"
Pour activer l'agent SSH dans Docker Compose, ajoutez les flags suivants à votre service :
services:
web:
image: nginx:alpine
volumes:
- type: bind
source: /run/host-services/ssh-auth.sock
target: /run/host-services/ssh-auth.sock
environment:
- SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock
Limitations connues
Changer les adresses IP internes
Les adresses IP internes utilisées par Docker peuvent être changées depuis Paramètres. Après avoir changé les IP, vous devez réinitialiser le cluster Kubernetes et quitter tout Swarm actif.
Il n'y a pas de pont docker0
sur l'hôte
En raison de la façon dont le réseau est implémenté dans Docker Desktop, vous ne pouvez
pas voir une interface docker0
sur l'hôte. Cette interface est en fait dans la
machine virtuelle.
Je ne peux pas pinguer mes conteneurs
Docker Desktop ne peut pas router le trafic vers les conteneurs Linux. Cependant si vous êtes utilisateur Windows, vous pouvez pinguer les conteneurs Windows.
L'adressage IP par conteneur n'est pas possible
C'est parce que le réseau bridge
Docker n'est pas accessible depuis l'hôte.
Cependant si vous êtes utilisateur Windows, l'adressage IP par conteneur est possible avec les conteneurs Windows.
Use cases and workarounds
I want to connect from a container to a service on the host
The host has a changing IP address, or none if you have no network access.
Docker recommends you connect to the special DNS name host.docker.internal
,
which resolves to the internal IP address used by the host.
You can also reach the gateway using gateway.docker.internal
.
If you have installed Python on your machine, use the following instructions as an example to connect from a container to a service on the host:
-
Run the following command to start a simple HTTP server on port 8000.
python -m http.server 8000
If you have installed Python 2.x, run
python -m SimpleHTTPServer 8000
. -
Now, run a container, install
curl
, and try to connect to the host using the following commands:$ docker run --rm -it alpine sh # apk add curl # curl http://host.docker.internal:8000 # exit
I want to connect to a container from the host
Port forwarding works for localhost
. --publish
, -p
, or -P
all work.
Ports exposed from Linux are forwarded to the host.
Docker recommends you publish a port, or to connect from another container. This is what you need to do even on Linux if the container is on an overlay network, not a bridge network, as these are not routed.
For example, to run an nginx
webserver:
$ docker run -d -p 80:80 --name webserver nginx
To clarify the syntax, the following two commands both publish container's port 80
to host's port 8000
:
$ docker run --publish 8000:80 --name webserver nginx
$ docker run -p 8000:80 --name webserver nginx
To publish all ports, use the -P
flag. For example, the following command
starts a container (in detached mode) and the -P
flag publishes all exposed ports of the
container to random ports on the host.
$ docker run -d -P --name webserver nginx
Alternatively, you can also use host networking to give the container direct access to the network stack of the host.
See the
run command for more details on
publish options used with docker run
.