Подтвердить что ты не робот

Как назначить статический публичный IP-адрес контейнера докеров

Можно ли назначить static public IP контейнеру. Таким образом, контейнер имеет общедоступный IP-адрес. Клиент может получить доступ к контейнеру с IP-адресом.

4b9b3361

Ответ 1

С выпущенными в настоящее время версиями Docker это невозможно (без большой ручной работы за спиной Docker), хотя это редко необходимо.

Docker предоставляет сетевые службы в контейнерах с помощью сопоставлений портов, а сопоставления портов могут привязываться к определенным IP-адресам вашего хоста. Поэтому, если вы хотите иметь один веб-сервер в 192.168.10.10 и другом веб-сервере в 192.168.10.20, сначала убедитесь, что эти адреса доступны на вашем хосте:

ip addr add 192.168.10.10/24 dev eth0
ip addr add 192.168.10.20/24 dev eth0

Затем запустите первый контейнер:

docker run -p 192.168.10.10:80:80 mywebserver

И, наконец, запустите второй контейнер:

docker run -p 192.168.10.20:80:80 mywebserver

В приведенных выше командах параметр -p используется для привязки сопоставления портов к определенному IP-адресу. Теперь у вас есть два контейнера, предлагающих услугу на одном и том же порту (порт 80), но на разных IP-адресах.

Ответ 2

Теперь это возможно с помощью docker 1.10 и новой опции docker run --ip, которую вы теперь видите в docker network connect.

Если указано, IP-адрес (-я) контейнера повторно применяется при перезапуске остановленного контейнера. Если IP-адрес больше не доступен, контейнер не запускается.

Один из способов гарантировать доступность IP-адреса - это указать --ip-range при создании сети и выбрать статический IP-адрес извне этого диапазона. Это гарантирует, что IP-адрес не будет передан другому контейнеру, пока этот контейнер не находится в сети.

$ docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 multi-host-network

$ docker network connect --ip 172.20.128.2 multi-host-network container2

Смотрите также Jessie Frazelle в блоге "IP-адреса для всех вещей" и запрос на перенос докер/докер # 19001.