Docker – Assigner une adresse IP à l’hôte
Cette approche consiste à utiliser soit le macvlan, soit ipvlan Docker network driver. Je préfère macvlan car chaque conteneur peut avoir sa propre adresse MAC mais certaines applications comme VMware n’aiment pas avoir plusieurs adresses MAC pour une seule carte réseau virtuelle et ne routeront pas le trafic correctement.
Réseaux par défaut
Quand vous installez Docker, il crée trois réseaux automatiquement. Vous pouvez lister ces réseaux en utilisant la commande docker network ls
:
$ docker network ls
NETWORK ID NAME DRIVER
7fca4eb8c647 bridge bridge
9f904ee27bf5 none null
cf03ee007fb4 host host
$
La mise en place est assez rapide. D’abord nous devons déterminer quelque choses.
- Masque de sous-réseau de votre réseau principal. Utilisons 192.168.1.0/24 pour cet exemple.
- Passerelle de votre réseau. Utilisons 192.168.1.252 pour cet exemple.
- Plage d’adresses IP à utiliser pour allouer les IPs sources ( vous pouvez assigner de manière statique des IPs en dehors de cette plage lorsque vous faites un « Docker run » si besoin est). Pour cet exemple j’utiliserai 192.168.1.128/25. Vous aurez besoin d’une tranche d’IPs pour laisser Docker gérer alors vous devez vous assurer que ces IPs ne sont pas utilisées sur votre réseau.
- Le nom du device que vous voulez utiliser pour le trafic. Pour cet exemple j’utiliserai eth0.
- Le nom du nouveau réseau Docker que vous allez créer. Utilisons “my net” pour cet exemple.
Ensuite vous créez un nouveau réseau Docker comme ceci :
$ docker network create -d macvlan —-subnet 10.0.0.0/24 --ip-range 10.0.0.128/25 —-gateway 10.0.0.1 -o parent=eth0 mynet
Désormais lorsque vous démarrez des conteneurs, utilisez :
$ docker run —-network mynet .....
Pour plus d’information consultez la documentation Docker : https://docs.docker.com/engine/userguide/networking/get-started-macvlan
Une lacune de cette approche est que macvlan/ipvlan ne semble pas fonctionner très bien avec Docker for Mac. Le HyperKit vm qu’il crée est un peu une boite noire. l’approche macvlan/ipvlan nécessite un réseau plus contrôlé que Docker for Mac ne vous offre. Si vous essayez de faire ceci avec Docker for Mac alors je vous suggèrererai de configurer une Machine Docker. Les docs expliquant comment le faire sont là : https://docs.docker.com/machine/get-started/.
Dans ce scénario, à moins que vous ne définissiez des règles de routage sur votre Mac, vous devriez avoir la machine docker machine qui utilise une interface bridgée à laquelle le réseau macvlan/ipvlan peut être attaché. De mon expérience le besoin d’une seconde NIC NATée à travers l’hôte MacOS n’est pas nécessaire mais vous pouvez arriver à une autre conclusion.