Date : 10 février 2021 - Révision 2025.12.04
Lorsque nous lançons un conteneur Ă partir dâune image, le moteur dâexĂ©cution âdockerâ attribue Ă cette instance dâimage, un rĂ©seau privĂ©, par dĂ©faut, le rĂ©seau nommĂ© âbridgeâ.
Par rĂ©seau privĂ©, nous entendons une adresse IP et un masque de sous-rĂ©seau qui nâont aucun lien avec les paramĂštres rĂ©seau de lâordinateur hĂŽte.
Par exemple, voici les spécifications de ma station de travail:
alain@srv02:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:d1:62:6c brd ff:ff:ff:ff:ff:ff
inet 192.168.2.152/24 brd 192.168.2.255 scope global dynamic ens32
valid_lft 559772sec preferred_lft 559772sec
NOTE : Lâadresse de ma station est 192.168.2.152 dans un rĂ©seau de classe âCâ -> /24.
Voyons maintenant les paramĂštres dâune instance dâAlpine:
alpine de façon éphémÚre (--rm)$ docker run -it --rm alpine
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
56: eth0@if57: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
NOTE : Lâadresse IP de lâinstance est 172.17.0.2 dans un rĂ©seau de classe âBâ -> /16.
Comment expliquer ces paramĂštres ?
docker network ls$ docker network ls
NETWORK ID NAME DRIVER SCOPE
00a924a413f9 bridge bridge local
69c859ba51de host host local
25167b5edb8a none null local
docker network inspect bridge$ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "00a924a413f9411d6c7a93ff5effb10663a86a82f1c2e2836dc2d4e7f5a33a75",
"Created": "2021-01-27T14:51:05.825275186Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
alpine et explorer les paramÚtres réseauxdocker run -it -d --name serveur01 alpine
docker run -it -d --name serveur02 alpine
docker network inspect bridge"Containers": {
"65bfb76d6d23817abfd09a9cbd7ef6131fd3c9386bed66f9570ee9f9b4f5c0c9": {
"Name": "serveur01",
"EndpointID": "2e2fb06cb65954ce00de9eea6773f6f882a3786224c80c5846f67ae35236905c",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
},
"de8a9686b9cba97e3f9b4880a7e3619c4d4257049d2851c03a39b078a15b0f7b": {
"Name": "serveur02",
"EndpointID": "2e769ffc9bff7275a57f76889df5724dda8ee223da8f5f5ed8f930ef48f36d39",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
}
}
Note: Voici un article sur la structure des âMac Addressâ des conteneurs docker.
$ docker exec -it serveur01 /bin/sh
/ # ip a
188: eth0@if189: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
/ # ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.219 ms
64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.234 ms
64 bytes from 172.17.0.3: seq=2 ttl=64 time=0.133 ms
--- 172.17.0.3 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.133/0.195/0.234 ms
Note: Nous avons utilisĂ© lâadresse dans la commande prĂ©cĂ©dente. Il est aussi possible dâutiliser le nom du conteneur. Docker maintient un service de nom âDNSâ Ă lâintĂ©rieur de ses rĂ©seaux.
Testons cette fonctionnalité.
/ # ping serveur02
ping: bad address 'serveur02'
<span style=âcolor: #ff0000;â>SURPRISE:</span> Cela ne semble pas fonctionner, pourquoi? Pour que docker active un service de noms de domaines, il faut crĂ©er des rĂ©seaux privĂ©s.
docker network create reseau01
docker network ls
NETWORK ID NAME DRIVER SCOPE
6eca92520b8e bridge bridge local
5b64d4b7c1d2 host host local
786951a15a98 none null local
31bdc39ceb12 reseau01 bridge local
NOTE : Docker propose diffĂ©rents types de rĂ©seaux, sous forme de pilotes (drivers). Il est possible de prĂ©ciser le pilote dĂ©sirĂ© Ă la crĂ©ation du rĂ©seau avec lâoption âdriver. En cas dâomission, le pilote âbridgeâ sera utilisĂ©.
Exemple,
docker network create --driver bridge alpine-net
docker network inspect reseau01
[
{
"Name": "reseau01",
"Id": "31bdc39ceb129..."
"Driver": "bridge",
"IPAM": {
"Driver": "default",
"Config": [
{
"Subnet": "172.21.0.0/16",
"Gateway": "172.21.0.1"
alpine associés au nouveau réseau: docker run --networkdocker run -it -d --name serveur03 --network reseau01 alpine
docker run -it -d --name serveur04 --network reseau01 alpine
docker network inspect reseau01
{
"Name": "reseau01",
"Id": "31bdc39ceb129eb1",
"Created": "2021-02-11T15:54:40.0712897Z",
"IPAM": {
"Config": [
{
"Subnet": "172.21.0.0/16",
"Gateway": "172.21.0.1"
...
"Containers": {
"b9f491e958b52a152c4a4ed5b5b"
"Name": "serveur03",
"EndpointID": "b683ff477492183274",
"MacAddress": "02:42:ac:15:00:02",
"IPv4Address": "172.21.0.2/16",
"IPv6Address": ""
},
"c5c6c10782466065a4b400732f0": {
"Name": "serveur04",
"EndpointID": "bc6e1f000f656ca8a0a5",
"MacAddress": "02:42:ac:15:00:03",
"IPv4Address": "172.21.0.3/16",
"IPv6Address": ""
}
},
docker exec -it serveur03 /bin/sh
/ # ping serveur04
PING serveur04 (172.21.0.3): 56 data bytes
64 bytes from 172.21.0.3: seq=0 ttl=64 time=0.379 ms
--- serveur04 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.169/0.274/0.379 ms
VOILĂ!: GrĂące au nouveau rĂ©seau, il est possible dâenvoyer des requĂȘtes IP en utilisant le nom du conteneur.
Référence: Docker Network Create
Ce type dâinterface rĂ©seau va utiliser directement la carte et les paramĂštres rĂ©seau de lâhĂŽte.
Par exemple,
docker run -d --name srv_websurlhote --rm --network host nginx
Remarquez quâici, nous nâavons pas utilisĂ© le paramĂštre -p xx:xx. Le conteneur va utiliser lâinterface rĂ©seau de lâhĂŽte et le port exposĂ© du conteneur sera accessible directement via lâhĂŽte.
Par exemple:
http://localhost
NOTE: Cette fonctionnalitĂ© nâest pas disponible sous Windows ou MacOS, seulement sur Linux.
Voir les rĂ©seaux disponibles sous Windows: Windows 10 â place container directly on local network? â Docker Desktop for Windows â Docker Community Forums
# 1 - Créer le réseau
docker network create -d macvlan --subnet 192.168.124.0/23 --gateway=192.168.124.1 -o parent="Ethernet 4"
# Liste des interfaces réseau sous Windows:
netsh interface show interface
Ătat admin Ătat Type Nom de l'interface
-------------------------------------------------------------------------
Activé Connecté Dédié VirtualBox Host-Only Network
Activé Connecté Dédié VirtualBox Host-Only Network #2
Activé Connecté Dédié Ethernet 2
Activé Connecté Dédié Ethernet 3
Activé Connecté Dédié Ethernet 4 (192.168.124.0)
Activé Déconnecté Dédié Wi-Fi 2
Activé Connecté Dédié vEthernet (Default Switch)
Activé Connecté Dédié vEthernet (WSL)
docker run -d --name srv_macvlan --rm --network macvlan --ip=192.168.125.100 nginx
Exemple sous Linux
# 1
$ ip a
2: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:6d:e1:4d brd ff:ff:ff:ff:ff:ff
altname enp2s5
inet 192.168.2.111/24 brd 192.168.2.255 scope global noprefixroute
# 2
$ docker network create -d macvlan --subnet 192.168.2.0/24 --gateway=192.168.2.1 -o parent="ens37" vlan01
# 3
$ docker run -d --name nginx_macvlan --rm --network vlan01 --ip=192.168.2.88 nginx
# 4
# Le serveur WEB Nginx devrait ĂȘtre accessible Ă partir du rĂ©seau local.
http://192.168.2.88
Document rédigé par Alain Boudreault © 2021-2026
Version 2025.12.03.1
Site par ve2cuy