⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

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.

Tip

La syntaxe pour -p est PORT_HÔTE:PORT_CLIENT.

Support proxy HTTP/HTTPS

Voir Proxies

Support proxy SOCKS5

Subscription: Business

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 :

  1. Naviguez vers l'onglet Ressources dans Paramètres.
  2. Dans le menu déroulant sélectionnez Proxies.
  3. Activez le bouton Configuration proxy manuelle.
  4. 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.

Note

Ces 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.
Note

Ce 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.
Important

Changer 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 :

  1. 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
    
  2. 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:

  1. 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.

  2. 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.