Неправильный IP-адрес в сервисе Docker Swarm - PullRequest
0 голосов
/ 29 мая 2018

У меня очень странная проблема:

У меня кластер роя, и один из моих сервисов имеет неверный ip:

$ docker service inspect nginx_backend | grep Addr
                    "Addr": "10.0.0.107/24"

Из любого контейнера в кластере:

/ # ping nginx_backend
PING nginx_backend (10.0.0.107): 56 data bytes
64 bytes from 10.0.0.107: seq=0 ttl=64 time=0.057 ms
64 bytes from 10.0.0.107: seq=1 ttl=64 time=0.061 ms
64 bytes from 10.0.0.107: seq=2 ttl=64 time=0.064 ms
64 bytes from 10.0.0.107: seq=3 ttl=64 time=0.083 ms
^C
--- nginx_backend ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.057/0.066/0.083 ms

Но на сервере, на котором размещен контейнер nginx_backend:

root@backend:~# docker inspect nginx_backend.1.myzy10psfdl9r4jljrsz5zd5t | grep IPv4
                        "IPv4Address": "10.0.0.87"

И когда какой-либо сервис пытается подключиться по имени, он получает ошибку соединения, но если я вручную помещаю запись, такую ​​как 10.0.0.87 nginx_backend в /etc/hosts внутри контейнера установлено успешное соединение.

Что я сделал не так?)

1 Ответ

0 голосов
/ 29 мая 2018

Docker создает (по умолчанию) Виртуальный IP (VIP) для каждой услуги.Это 10.0.0.107.Затем он балансирует запросы между внутренними контейнерами.Во втором примере (10.0.0.87) вы видите IP-адрес одного из контейнеров.Это также маршрутизируемо в Docker (именно поэтому удары по IP работают).Однако имя (nginx_backend.1.myzy10psfdl9r4jljrsz5zd5t) не может быть разрешено DNS, поэтому это не удается.

Вы можете найти список «резервных» контейнеров для службы, выполнив поиск DNS на tasks.nginx_backend.

Еще немного фона здесь: https://docs.docker.com/network/overlay/

...