Usiłuję teraz przypisać statyczny adres IP 172.17.0.1 podczas uruchamiania kontenera Docker.
Używam portu 2122 jako portu ssh tego kontenera, dzięki czemu ten kontener może nasłuchiwać portu 2122.
sudo docker run -i -t -p 2122:2122 ubuntu
To polecenie uruchomi kontener Docker z losowym adresem IP, takim jak 172.17.0.5, ale muszę przypisać konkretny adres IP do kontenera.
Poniższy skrypt powłoki odwołuje się do dokumentacji Docker w zaawansowanych ustawieniach sieciowych.
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
Ten skrypt powłoki przypisze statyczny adres IP 172.17.0.1 i link do grzywny na świecie. Ale ilekroć próbuję ssh do tego kontenera z mojego lokalnego, to nie działa. Jaki problem prawdopodobnie napotkałem?
Odpowiedzi:
Łatwo dzięki Docker w wersji 1.10.1, kompilacja 9e83765.
Najpierw musisz stworzyć własną sieć dokerów (mynet123)
niż po prostu uruchom obraz (wezmę na przykład Ubuntu)
następnie w powłoce ubuntu
Dodatkowo możesz użyć
--hostname
aby podać nazwę hosta--add-host
aby dodać więcej wpisów do / etc / hostsDokumenty (i dlaczego musisz utworzyć sieć) na https://docs.docker.com/engine/reference/commandline/network_create/
źródło
Dla
docker-compose
można używać następującychdocker-compose.yml
z hosta możesz przetestować za pomocą:
Modern
docker-compose
nie zmienia często adresu IP.Aby znaleźć Ips wszystkich kontenerów w
docker-compose
jednym wierszu, użyj:Jeśli chcesz zautomatyzować, możesz użyć czegoś takiego jak ten przykład
źródło
ip_range
ip_range
. Używam wersji: „3.4”.Nie bezpośrednia odpowiedź, ale może pomóc.
Korzystam z większości moich dokowanych usług powiązanych z własnymi statycznymi serwerami IP przy użyciu następnego podejścia:
Próba:
źródło
To działa dla mnie.
Utwórz sieć za pomocą
docker network create --subnet=172.17.0.0/16 selnet
Uruchom obraz dokera
docker run --net selnet --ip 172.18.0.2 hub
Na początku mam
Rozwiązanie: Zwiększono 2. czterokrotność IP [.18. zamiast .17.]
źródło
Natknąłem się na ten problem podczas próby dokowania Avahi, która musi być świadoma swojego publicznego adresu IP, aby działać poprawnie. Przypisywanie statycznego adresu IP do kontenera jest trudne ze względu na brak obsługi przypisywania statycznego adresu IP w Dockerze.
W tym artykule opisano technikę przypisywania statycznego adresu IP do kontenera w systemie Debian :
Usługa dokowania powinna zostać uruchomiona z
DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false"
. Zakładam, żebr0
most jest już skonfigurowany.Kontener powinien zacząć
--cap-add=NET_ADMIN --net=bridge
Wewnątrz pojemnika
pre-up ip addr flush dev eth0
w/etc/network/interfaces
może być używany do odwoływania adres IP przypisany przez Döcker jak w poniższym przykładzie:/etc/init.d/networking start
. Również skrypt wejściowy musi edytować lub wypełniać/etc/hosts
plik, aby usunąć odniesienia do adresu IP przypisanego do dokera.źródło
Możesz ustawić adres IP podczas jego uruchamiania.
Zobacz mój przykład na https://github.com/RvdGijp/mariadb-10.1-galera
źródło
Możesz uzyskać dostęp do usługi innych kontenerów po nazwie (
ping apache
dostanie ip lubcurl http://apache
uzyska dostęp do usługi http). Może to być alternatywa dla statycznego adresu ip.źródło
Jeśli chcesz, aby Twój kontener miał własne wirtualne gniazdo Ethernet (z własnym adresem MAC), iptables, a następnie użyj sterownika Macvlan. Może to być konieczne do przekierowania ruchu do routera / ISP.
https://docs.docker.com/engine/userguide/networking/get-started-macvlan
źródło