다른 스택에 있는 서비스에 어떻게 액세스합니까?

다른 스택에 있는 서비스에 어떻게 액세스합니까?

나는 docker swarm 구성을 가지고 있고 거기에 두 개의 스택( mainmon)을 배포했습니다. 한 스택에 포트를 노출하고 다른 스택에서 이를 참조할 수 있습니다. 그러나 저는 그렇게 하지 않고 대신 127.0.0.11 DNS를 사용하여 액세스하도록 하는 방법을 찾으려고 했습니다.

에는 mon다음과 같은 서비스가 있습니다.grafana

사용https://docs.docker.com/docker-cloud/apps/service-links/#discovering-services-or-containers-on-another-stack스택 이름을 사용하여 참조할 수 있음을 나타냈지만 시도했을 때 작동하지 않았으며 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-service

배포 시 제공한 스택 이름이 서비스 앞에 붙습니다.

docker stack ls

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

관련 정보