Attribuer une adresse IP statique à un conteneur Docker

Je suis parfaitement satisfait de la plage d’IP que docker me donne par défaut 192.168.x.x, donc je n’ai pas besoin de créer un nouveau pont, je veux juste donner à mes conteneurs une adresse statique dans cette plage afin que je puisse diriger les navigateurs clients vers elle directement. J’ai essayé d’utiliser

RUN echo "auto eth0" >> /etc/network/interfaces
RUN echo "iface eth0 inet static" >> /etc/network/interfaces
RUN echo "address 192.168.0.250" >> /etc/network/interfaces
RUN echo "netmask 255.255.0.0" >> /etc/network/interfaces
RUN ifdown eth0
RUN ifup eth0

à partir du Dockerfile, il a correctement rempli le fichier d’interfaces, mais l’interface elle-même n’a pas changé. En fait, en lançant ifup eth0 dans le conteneur, on obtient cette erreur :

RTNETLINK answers: Operation not permitted Failed to bring up eth0

Vous devez d’abord créer votre propre réseau sous docker (mynetwork)

docker network create --subnet=192.17.0.0/16 mynetwork

il suffit d’exécuter l’image (je prendrai ubuntu comme exemple)

docker run --net mynetwork --ip 192.17.0.22 -it ubuntu bash

puis dans le shell ubuntu

ip addr

En plus, vous pouvez utiliser
--hostname pour spécifier un nom d’hôte
--add-host pour ajouter des entrées à /etc/hosts

J’ai créé une nouvelle interface (docker0) dans le fichier /etc/network/interfaces de mon hôte, j’ai exécuté sudo ifup docker0 sur l’hôte, et ensuite j’ai exécuté:

docker run --net=host -i -t ... 

qui récupère l’IP statique et l’attribue à docker0 dans le conteneur.

  • Configurez votre propre bridge (par exemple br0)
  • Démarrez docker avec : -b=br0

& avec pipework (192.168.1.1 ci-dessous étant l’adresse ip de la passerelle par défaut) :

pipework br0 container-name 192.168.1.9/[email protected]

Edit: ne commencez pas par --net=none : cela ferme les ports du conteneur.