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

Как выставить ip-порт и порт контейнера док-станции на внешний хост-докер без сопоставления портов?

Когда я запустил два контейнера докеров для одного и того же веб-изображения на одном докере-хосте.

  • два контейнера докера прослушивались на том же порту 5000
  • Порт 5000 из двух контейнеров был сопоставлен с различными портами хост-докера: 49155, 49156
  • для доступа к двум контейнерам с внешнего узла-докере необходимо получить доступ к IP-адресу докере и порту 49155 или 49156

Есть ли решение для доступа к контейнеру докера с внешнего узла докеры его ip и port, x.x.x.x: 5000, без сопоставления портов?

Все контейнеры докеров на разных док-станциях могут напрямую обращаться друг к другу.

4b9b3361

Ответ 1

Вы можете выполнить это с помощью IP-псевдонимов на хосте.

Сначала добавьте виртуальный интерфейс на хост, который имеет другой IP-адрес, чем основной интерфейс. Мы будем называть основной интерфейс eth0 с IP 10.0.0.10, а виртуальный интерфейс eth0:1 с IP-адресом 10.0.0.11.

 ifconfig eth0:1 10.0.0.11 netmask 255.255.255.0 up 

Теперь запустите контейнеры и сопоставьте порт 5000 с соответствующим интерфейсом. Например:

docker run -p 10.0.0.10:5000:5000 -name container1 <someimage> <somecommand>
docker run -p 10.0.0.11:5000:5000 -name container2 <someimage> <somecommand>

Теперь вы можете получить доступ к каждому контейнеру на порту 5000, используя внешние IP-адреса извне.

Ответ 2

При создании виртуальной машины убедитесь, что в сети выбрано следующее:

Attached to:        Bridged NetworkManager
Adapter Type:       PCnet-Fast III (Am 79C973)
Promiscious Mode    Allow All

RHEL 6.5/Fedora 20

Install docker, libvrt

Убедитесь, что выполните следующие действия с помощью root

# chkconfig NetworkManager off
# chkconfig network on  
# service NetworkManager stop
# service network start

Создать файл ifcfg-xxxxx в /etc/sysconfig/network -scripts

DEVICE=xxxxx
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
DELAY=0

и добавьте в ifcfg-p2p1/ifcfg-eth0 в конце файла BRIDGE=xxxx

Перезапустить VM

run

brctl show 

чтобы убедиться, что мостовое соединение имеет адаптер либо p2p1, либо eth0 например.

# brctl show
bridge name     bridge id               STP enabled     interfaces
gsbr01          8000.080027595649       no              eth0
virbr0          8000.5254004c1564       yes             virbr0-nic

теперь перед началом докера мы должны использовать наш мост, а не docker0, запустите docker как docker -d -b=gsbr01

$ echo 'DOCKER_OPTS="-b=gsbr01"' >> /etc/sysconfig/docker
$ sudo service docker start

Проверьте результат:

# brctl show
bridge name     bridge id               STP enabled     interfaces
gsbr01          8000.080027595649       no              eth0
                                                        veth5806f27
                                                        vethb3e33da
virbr0          8000.5254004c1564       yes             virbr0-nic

docker -d -b=gsbr01