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

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

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

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

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

2 ответа

Вы можете сделать это с помощью псевдонимов 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-адреса извне.

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

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

Перезагрузите ВМ

бежать

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
Другие вопросы по тегам