Можно ли назначить static public IP
контейнеру. Таким образом, контейнер имеет общедоступный IP-адрес. Клиент может получить доступ к контейнеру с IP-адресом.
Как назначить статический публичный IP-адрес контейнера докеров
Ответ 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.