I have a docker swarm configuration and in there I deployed two stacks (main
and mon
) I can expose a port in one stack and I can refer to it from another. However, I was trying to find a way of not doing that but instead have it access it using the 127.0.0.11 DNS.
In mon
I have a service called grafana
Using https://docs.docker.com/docker-cloud/apps/service-links/#discovering-services-or-containers-on-another-stack which indicated that I can use the stack name to refer to it didn't work when I tried to ping grafana.mon
it just returned invalid host name.
Для этого все, что вам нужно, - это заставить его использовать ту же сеть, тогда они будут видны. В моем случае я определил сеть под названием public
, на которую ссылаются извне все мои стеки
docker network create -d overlay --attachable public
Оттуда в моем файле docker-compose.yml, который у меня есть
networks:
public:
external:
name: public
Для доступа к нему просто используйте название службы.
Вам необходимо разрешить обоим стекам подключаться через оверлейный тип сети, а затем разрешить обоим стекам использовать (по крайней мере, для требуемой службы) оверлейную сеть, созданную вне обоих стеков.
Оверлейная сеть должна быть создана до того, как стеки будут подняты, чтобы службы, которым необходимо подключиться, могли «присоединиться» к ней.
Создайте сеть следующим образом
docker network create --driver overlay --attachable
Затем укажите имя службы в вашем файле env, вы можете проверить, какое имя вызывает ваша служба
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
vkz5vccbmce7 foo-stack_por-service replicated 1/1 por-service:1.0.0 *:33065->3306/tcp
sjpnrkm1iiha foo-stack_vic-service replicated 1/1 vic-service:1.0.0 *:8081->80/tcp
0capavl31oab bar-stack_tar-service replicated 1/1 tar-service:1.0.0 *:33066->3306/tcp
9vohh24jt6hy bar-stack_zen-service replicated 1/1 zen-service:1.0.0 *:8082->80/tcp
Теперь получите имя службы из столбца NAME. Пример: bar-stack_tar-service
Обратите внимание, что ваши сервисы имеют префикс имени стека, которое вы указываете при развертывании
docker stack ls
NAME SERVICES ORCHESTRATOR
foo-stack 2 Swarm
bar-stack 2 Swarm