How do you access a service that is in another stack?

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.

4
задан 26 March 2018 в 02:58
2 ответа

Для этого все, что вам нужно, - это заставить его использовать ту же сеть, тогда они будут видны. В моем случае я определил сеть под названием public , на которую ссылаются извне все мои стеки

docker network create -d overlay --attachable public

Оттуда в моем файле docker-compose.yml, который у меня есть

networks:
  public:
    external:
      name: public

Для доступа к нему просто используйте название службы.

1
ответ дан 3 December 2019 в 04:08

Вам необходимо разрешить обоим стекам подключаться через оверлейный тип сети, а затем разрешить обоим стекам использовать (по крайней мере, для требуемой службы) оверлейную сеть, созданную вне обоих стеков.

Оверлейная сеть должна быть создана до того, как стеки будут подняты, чтобы службы, которым необходимо подключиться, могли «присоединиться» к ней.

Создайте сеть следующим образом

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
1
ответ дан 8 November 2020 в 18:05

Теги

Похожие вопросы