Я сейчас пытаюсь назначить статический IP 172.17.0.1 при запуске контейнера Docker.
Я использую порт 2122 в качестве порта ssh этого контейнера, чтобы позволить этому контейнеру прослушивать порт 2122.
sudo docker run -i -t -p 2122:2122 ubuntu
Эта команда запускает контейнер Docker со случайным IP-адресом, таким как 172.17.0.5, но мне нужно назначить конкретный IP-адрес для контейнера.
Следующий сценарий оболочки - это то, что я ссылаюсь на документацию Docker в расширенных сетевых настройках.
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
Этот сценарий оболочки назначит статический IP 172.17.0.1 и установит связь со всем миром. Но всякий раз, когда я пытаюсь подключиться к этому контейнеру из моего локального хранилища, это не сработало. В чем проблема, возможно, я встретил?
Ответы:
Легко с Docker версии 1.10.1, сборка 9e83765.
Для начала вам нужно создать собственную докерную сеть (mynet123)
чем просто запустить образ (я возьму Ubuntu в качестве примера)
тогда в оболочке Ubuntu
Дополнительно вы можете использовать
--hostname
указать имя хоста--add-host
добавить больше записей в / etc / hostsДокументы (и зачем вам нужно создавать сеть) по адресу https://docs.docker.com/engine/reference/commandline/network_create/
источник
Для
docker-compose
вы можете использовать следующиеdocker-compose.yml
с хоста вы можете протестировать используя:
Модерн
docker-compose
не меняет IP-адрес так часто.Чтобы найти ips всех контейнеров
docker-compose
в одной строке, используйте:Если вы хотите автоматизировать, вы можете использовать что-то вроде этого примера
источник
ip_range
ip_range
. Я использую версию: «3.4».Не прямой ответ, но это может помочь.
Я запускаю большинство моих dockerized сервисов, привязанных к собственным статическим ips, используя следующий подход:
Образец:
источник
Это работает для меня.
Создать сеть с
docker network create --subnet=172.17.0.0/16 selnet
Запустить образ докера
docker run --net selnet --ip 172.18.0.2 hub
Сначала я получил
Решение: Увеличена 2-я четверка IP [.18. вместо .17.]
источник
Я наткнулся на эту проблему во время попытки взломать Avahi, который должен знать свой публичный IP-адрес, чтобы нормально функционировать. Назначение статического IP-адреса контейнеру затруднительно из-за отсутствия поддержки статического назначения IP-адреса. в Docker.
В этой статье описывается методика назначения статического IP-адреса контейнеру в Debian :
Сервис Docker должен быть запущен с
DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false"
. Я предполагаю, чтоbr0
мост уже настроен.Контейнер должен быть запущен с
--cap-add=NET_ADMIN --net=bridge
Внутри контейнера
pre-up ip addr flush dev eth0
в/etc/network/interfaces
может быть использован , чтобы закрыть IP - адрес , назначенный Докер , как в следующем примере:/etc/init.d/networking start
. Также сценарий ввода должен отредактировать или заполнить/etc/hosts
файл, чтобы удалить ссылки на назначенный Docker IP.источник
Вы можете установить IP во время его запуска.
Смотрите мой пример на https://github.com/RvdGijp/mariadb-10.1-galera
источник
Вы можете получить доступ к сервису других контейнеров по их имени (
ping apache
получите ip илиcurl http://apache
получите доступ к сервису http) И это может быть альтернативой статическому ip.источник
Если вы хотите, чтобы у вашего контейнера был собственный виртуальный Ethernet-сокет (с собственным MAC-адресом), iptables, используйте драйвер Macvlan. Это может быть необходимо для маршрутизации трафика на ваш маршрутизатор / ISP.
https://docs.docker.com/engine/userguide/networking/get-started-macvlan
источник