Ceci est une ancienne révision du document !
Par défaut le conteneur se voit attribuer une adresse IP pour chaque réseau auquel il est connecté. Le daemon Docker agit à la manière d'un serveur DHCP et fournit une IP dans le pool réservé au réseau. Chaque réseau à son propre masque et sa passerelle par défaut.
Lorsque de sa création, le conteneur ne peut être connecté qu'à un seul réseau. Celui-ci peut être définit sur la ligne de commande via l'option --network. On peut également spécifier une adresse IP via les options --ip ou --ip6. Si rien n'est spécifié, un réseau dédié est créé pour le conteneur.
docker run --interactive --tty --name network_test busybox:latest /bin/sh # On affiche IP de l'interface créée par défaut / # ip a ... 24: eth0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 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 # on quitte le bash, l'execution du conteneur est stoppée exit
Afficher les paramètres réseau actuels du conteneur network_test
:
docker container inspect --format "{{json .NetworkSettings}}" network_test | jq
On redémarre le conteneur et on le connecte à un réseau docker supplémentaire existant sur l’hôte. Ici pour l'exemple vnet-monitoring
# Démarrer le conteneur qui rejoint son réseau par défaut docker container start network_test # Connecter le conteneur sur un autre réseau, ici vnet-monitoring docker network connect vnet-monitoring network_test
On ouvre un shell dans le conteneur pour afficher les paramètres réseau
docker container exec --interactive network_test /bin/sh ip a ... 26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 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 28: eth1@if29: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:18:00:04 brd ff:ff:ff:ff:ff:ff inet 172.24.0.4/16 brd 172.24.255.255 scope global eth1 valid_lft forever preferred_lft forever
On constate bien qu'une nouvelle interface connecte le conteneur au réseau 172.24.0.0/16
Les alias permettent de définir des noms d’hôtes alternatifs via lesquels un service pourra être atteint au sein d'un réseau.
version: "3.3" networks: vnet-monitoring: external: name: vnet-monitoring services: node-exporter: image: prom/node-exporter:v1.2.2 container_name: node-exporter restart: unless-stopped environment: {} networks: vnet-monitoring: aliases: - localnode
Dans l'exemple ci-dessus, le service node-exporter
est inséré dans le réseau externe vnet-monitoring
. Au sein de se réseau, on pourra communiquer avec le service node-exporter en le désignant indifféremment node-exporter
ou localnode
.
$ docker container run --rm --interactive --tty --network vnet-monitoring busybox:latest / # ping node-exporter PING node-exporter (172.24.0.4): 56 data bytes 64 bytes from 172.24.0.4: seq=0 ttl=64 time=0.165 ms 64 bytes from 172.24.0.4: seq=1 ttl=64 time=0.196 ms 64 bytes from 172.24.0.4: seq=2 ttl=64 time=0.178 ms ^C --- node-exporter ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0.165/0.179/0.196 ms / # ping localnode PING localnode (172.24.0.4): 56 data bytes 64 bytes from 172.24.0.4: seq=0 ttl=64 time=0.223 ms 64 bytes from 172.24.0.4: seq=1 ttl=64 time=0.201 ms
Il est possible de spécifier un ou plusieurs domaines de recherche pour les noms de machine non pleinement qualifiés.
En ligne de commande via les
Via le docker-compose