Разрешить сервису Docker Swarm связывать IP-интерфейс хоста - PullRequest
0 голосов
/ 23 февраля 2019

Я создаю скрипт go, который переключается между IP, связанными с моим интерфейсом eno1.

В случае, если моя программа выполняет curl --interface "51.15.xx.xx" ... и переключается между моими 3 IP

Ниже мой интерфейс:

2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether ac:1f:6b:27:xx:xx brd ff:ff:ff:ff:ff:ff
inet 51.15.xx.xx/24 brd 51.15.21.255 scope global eno1
   valid_lft forever preferred_lft forever
inet 212.83.xx.x1/24 brd 212.83.154.255 scope global eno1
   valid_lft forever preferred_lft forever
inet 212.83.xx.x2/24 brd 212.83.154.255 scope global secondary eno1
   valid_lft forever preferred_lft forever

Моя программа работает отлично, когда он работает на хосте напрямую, он работает и на docker run --network=host.

Но при работе с роем докеров (развернутым на 1 узле) я не могу связать хост-сеть, и моя программа не может работать.Я получаю сообщение об ошибке: bind failed with errno 99: Address not available

Я просто хочу связать host сеть с локальной областью на службе роя или разрешить моей службе роя связывать хост ip

PS: я уже пробуюдля привязки сетевого хоста, но когда я выполняю docker stack deploy, докер выбирает сеть host с областью действия.

С уважением

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Попробуйте использовать прямую команду для создания службы, например:

Код

docker service create --network host caa06d9c/echo

Образ Docker не предоставляет никаких портов

Проверка

curl localhost:8080

Выход

{
    "method": "GET",
    "path": "/",
    "ip": "127.0.0.1"
}

Таким образом, порт подключен к хосту и доступен из любых интерфейсов.

0 голосов
/ 23 февраля 2019

Публикуете ли вы порт при объявлении вашего роя-сервиса или стека?

В соответствии с документацией:

Если ваш контейнер или служба не публикует порты, сетевое взаимодействие не действует.

См. https://docs.docker.com/network/host/

...