Как выставить ip-порт и порт контейнера док-станции на внешний хост-докер без сопоставления портов?
Когда я запустил два контейнера докеров для одного и того же веб-изображения на одном докере-хосте.
- два контейнера докера прослушивались на том же порту 5000
- Порт 5000 из двух контейнеров был сопоставлен с различными портами хост-докера: 49155, 49156
- для доступа к двум контейнерам с внешнего узла-докере необходимо получить доступ к IP-адресу докере и порту 49155 или 49156
Есть ли решение для доступа к контейнеру докера с внешнего узла докеры его ip и port, x.x.x.x: 5000, без сопоставления портов?
Все контейнеры докеров на разных док-станциях могут напрямую обращаться друг к другу.
Ответы
Ответ 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