J'essaie maintenant d'attribuer une IP statique 172.17.0.1 lors du démarrage d'un conteneur Docker.
J'utilise le port 2122 comme port ssh de ce conteneur afin de laisser ce conteneur écouter le port 2122.
sudo docker run -i -t -p 2122:2122 ubuntu
Cette commande exécutera un conteneur Docker avec une IP aléatoire comme 172.17.0.5, mais je dois attribuer une IP spécifique au conteneur.
Le script shell suivant est ce que je référence à la documentation Docker dans les paramètres réseau avancés.
pid=$(sudo docker inspect -f '{{.State.Pid}}' <container_name> 2>/dev/null)
sudo rm -rf /var/run/netns/*
sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid
sudo ip link add A type veth peer name B
sudo brctl addif docker0 A
sudo ip link set A up
sudo ip link set B netns $pid
sudo ip netns exec $pid ip link set eth0 down
sudo ip netns exec $pid ip link delete eth0
sudo ip netns exec $pid ip link set dev B name eth0
sudo ip netns exec $pid ip link set eth0 address 12:34:56:78:9a:bc
sudo ip netns exec $pid ip link set eth0 down
sudo ip netns exec $pid ip link set eth0 up
sudo ip netns exec $pid ip addr add 172.17.0.1/16 dev eth0
sudo ip netns exec $pid ip route add default via 172.17.42.1
Ce script shell attribuera une IP statique 172.17.0.1 et un lien vers l'amende mondiale. Mais chaque fois que j'essaie de ssh vers ce conteneur à partir de mon local, cela n'a pas fonctionné. Quel est le problème que j'ai rencontré?
Réponses:
Facile avec Docker version 1.10.1, build 9e83765.
Vous devez d'abord créer votre propre réseau docker (mynet123)
que d'exécuter simplement l'image (je prendrai ubuntu comme exemple)
puis dans la coque ubuntu
De plus, vous pouvez utiliser
--hostname
pour spécifier un nom d'hôte--add-host
pour ajouter plus d'entrées à / etc / hostsDocuments (et pourquoi vous devez créer un réseau) sur https://docs.docker.com/engine/reference/commandline/network_create/
la source
Car
docker-compose
vous pouvez utiliser ce qui suitdocker-compose.yml
de l'hôte, vous pouvez tester en utilisant:
Moderne
docker-compose
ne change pas souvent d'adresse IP.Pour trouver les ips de tous les conteneurs dans votre
docker-compose
en une seule ligne, utilisez:Si vous souhaitez automatiser, vous pouvez utiliser quelque chose comme cet exemple gist
la source
ip_range
ip_range
. J'utilise la version: '3.4'.Pas une réponse directe mais cela pourrait aider.
J'exécute la plupart de mes services dockerized liés à leurs propres IPS statiques en utilisant l'approche suivante:
Échantillon:
la source
Cela fonctionne pour moi.
Créez un réseau avec
docker network create --subnet=172.17.0.0/16 selnet
Exécuter l'image docker
docker run --net selnet --ip 172.18.0.2 hub
Au début, j'ai
Solution: augmentation du 2e quadruple de l'IP [.18. au lieu de .17.]
la source
Je suis tombé sur ce problème lors de la tentative de dockerise Avahi qui doit être conscient de son adresse IP publique pour fonctionner correctement. L'attribution d'une adresse IP statique au conteneur est délicate en raison du manque de prise en charge de l'attribution d'adresses IP statiques dans Docker.
Cet article décrit la technique pour attribuer une IP statique au conteneur sur Debian :
Le service Docker doit être démarré avec
DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false"
. Je suppose que lebr0
pont est déjà configuré.Le conteneur doit être démarré avec
--cap-add=NET_ADMIN --net=bridge
Le conteneur intérieur
pre-up ip addr flush dev eth0
dans/etc/network/interfaces
peut être utilisé pour ignorer l'adresse IP attribuée par Docker comme dans l'exemple suivant:/etc/init.d/networking start
. Le script d'entrée doit également modifier ou remplir le/etc/hosts
fichier afin de supprimer les références à l'adresse IP attribuée par Docker.la source
Vous pouvez définir l'IP tout en l'exécutant.
Voir mon exemple sur https://github.com/RvdGijp/mariadb-10.1-galera
la source
Vous pouvez accéder au service d'autres conteneurs par leur nom (
ping apache
obtiendra l'IP oucurl http://apache
accèderait au service http) Et cela peut être une alternative à une IP statique.la source
Si vous voulez que votre conteneur ait sa propre prise Ethernet virtuelle (avec sa propre adresse MAC), iptables, alors utilisez le pilote Macvlan. Cela peut être nécessaire pour acheminer le trafic vers votre routeur / FAI.
https://docs.docker.com/engine/userguide/networking/get-started-macvlan
la source