Ich versuche jetzt, eine statische IP 172.17.0.1 zuzuweisen, wenn ein Docker-Container gestartet wird.
Ich verwende Port 2122 als SSH-Port dieses Containers, damit dieser Container Port 2122 abhört.
sudo docker run -i -t -p 2122:2122 ubuntu
Dieser Befehl führt einen Docker-Container mit einer zufälligen IP wie 172.17.0.5 aus, aber ich muss dem Container eine bestimmte IP zuweisen.
Das folgende Shell-Skript ist das, worauf ich in den erweiterten Netzwerkeinstellungen in der Docker-Dokumentation verweise.
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
Dieses Shell-Skript weist eine statische IP 172.17.0.1 zu und verlinkt auf die Weltstrafe. Aber wann immer ich versuche, von meinem lokalen zu diesem Container zu ssh, hat es nicht funktioniert. Was ist das Problem, das ich möglicherweise getroffen habe?
Antworten:
Einfach mit Docker Version 1.10.1, Build 9e83765.
Zuerst müssen Sie Ihr eigenes Docker-Netzwerk erstellen (mynet123)
als einfach das Bild ausführen (ich nehme Ubuntu als Beispiel)
dann in Ubuntu Shell
Zusätzlich könnten Sie verwenden
--hostname
um einen Hostnamen anzugeben--add-host
um weitere Einträge zu / etc / hosts hinzuzufügenDokumente (und warum Sie ein Netzwerk erstellen müssen) unter https://docs.docker.com/engine/reference/commandline/network_create/
quelle
Für
docker-compose
Sie können folgende verwendendocker-compose.yml
Vom Host aus können Sie Folgendes testen:
Modern
docker-compose
ändert die IP-Adresse nicht so häufig.Um ips aller Container in Ihrem
docker-compose
in einer einzigen Zeile zu finden, verwenden Sie:Wenn Sie automatisieren möchten, können Sie so etwas wie dieses Beispiel verwenden
quelle
ip_range
ip_range
. Ich benutze Version: '3.4'.Keine direkte Antwort, aber es könnte helfen.
Ich führe die meisten meiner Docker-Dienste, die an eigene statische IPs gebunden sind, mit dem folgenden Ansatz aus:
Stichprobe:
quelle
Das funktioniert bei mir.
Erstellen Sie ein Netzwerk mit
docker network create --subnet=172.17.0.0/16 selnet
Führen Sie das Docker-Image aus
docker run --net selnet --ip 172.18.0.2 hub
Zuerst habe ich bekommen
Lösung: Das 2. Vierfache der IP wurde erhöht [.18. statt .17.]
quelle
Ich bin auf dieses Problem gestoßen, als ich versucht habe, Avahi anzudocken , das sich seiner öffentlichen IP bewusst sein muss, um ordnungsgemäß zu funktionieren. Das Zuweisen einer statischen IP-Adresse zum Container ist schwierig, da die statische IP-Zuweisung in Docker nicht unterstützt wird.
Dieser Artikel beschreibt die Technik, wie dem Container unter Debian eine statische IP zugewiesen wird :
Der Docker-Dienst sollte mit gestartet werden
DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false"
. Ich gehe davon aus, dass diebr0
Brücke bereits konfiguriert ist.Container sollte mit gestartet werden
--cap-add=NET_ADMIN --net=bridge
Der interne Container
pre-up ip addr flush dev eth0
in/etc/network/interfaces
kann verwendet werden, um die von Docker zugewiesene IP-Adresse wie im folgenden Beispiel zu verwerfen:/etc/init.d/networking start
. Außerdem muss das Eingabeskript die/etc/hosts
Datei bearbeiten oder füllen , um Verweise auf die vom Docker zugewiesene IP zu entfernen.quelle
Sie können die IP festlegen, während Sie sie ausführen.
Siehe mein Beispiel unter https://github.com/RvdGijp/mariadb-10.1-galera
quelle
Sie können über ihren Namen auf den Dienst anderer Container zugreifen (
ping apache
erhalten die IP odercurl http://apache
würden auf den http-Dienst zugreifen). Dies kann eine Alternative zu einer statischen IP sein.quelle
Wenn Ihr Container über einen eigenen virtuellen Ethernet-Socket (mit eigener MAC-Adresse) und iptables verfügen soll, verwenden Sie den Macvlan-Treiber. Dies kann erforderlich sein, um den Datenverkehr an Ihren / ISP-Router weiterzuleiten.
https://docs.docker.com/engine/userguide/networking/get-started-macvlan
quelle