Как получить доступ к сервису, находящемуся в другом стеке?

Как получить доступ к сервису, находящемуся в другом стеке?

У меня есть конфигурация docker swarm, и в ней я развернул два стека ( mainи mon) я могу открыть порт в одном стеке и могу ссылаться на него из другого. Однако я пытался найти способ не делать этого, а вместо этого получить к нему доступ с помощью DNS 127.0.0.11.

У monменя есть услуга, которая называетсяgrafana

С использованиемhttps://docs.docker.com/docker-cloud/apps/service-links/#обнаружение-сервисов-или-контейнеров-в-другом-стекечто указывало на то, что я могу использовать имя стека для ссылки на него, но это не сработало, когда я попытался ping grafana.monэто сделать, он просто вернул неверное имя хоста.

решение1

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

docker network create -d overlay --attachable public

Отсюда в моем файле docker-compose.yml есть

networks:
  public:
    external:
      name: public

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

решение2

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

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

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

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-сервис

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

docker stack ls

NAME                SERVICES            ORCHESTRATOR
foo-stack           2                   Swarm
bar-stack           2                   Swarm

Связанный контент