Итак, у меня есть механизм докера (версия 1.12.6, сборка 78d1802), работающий на хосте Ubuntu.
Я создал рой, используя
docker swarm init --advertise-addr 192.168.1.2
У меня есть локально предварительно созданный образ, с помощью которого я создаю службу с именем nodeapp следующим образом.
docker service create --name nodeapp --publish 3000:3000 --replicas 2 node-app-image
Теперь, когда я набираю curl localhost:3000
, я получаю ожидаемый правильный ответ, и до этого момента все работает.
Это document и многие другие, на которые я ссылался, похоже, предполагают, что docker v1.12.x имеет встроенную балансировку нагрузки/маршрутизацию с помощью методов DNS или VIP.
Итак, я пытаюсь получить доступ к своей службе через имя службы или виртуальный IP-адрес следующим образом.
curl nodeapp:3000
на что я получаю curl: (6) Could not resolve host: nodeapp
а также
curl 10.255.0.6:3000
на что я получаю curl: (7) Failed to connect to 10.255.0.6 port 3000: Connection timed out
Обратите внимание, что я использовал следующую команду для получения виртуального IP-адреса.
docker service inspect --format {{.Endpoint.VirtualIPs}} nodeapp
что дает [{boq3g7s47w47q2ej56li9s3dw 10.255.0.6/16}]
Почему я не могу получить доступ к своей службе, используя VIP или имя службы, хотя я могу получить к ней доступ, используя localhost:3000?