
나는 docker swarm 구성을 가지고 있고 거기에 두 개의 스택( main
및 mon
)을 배포했습니다. 한 스택에 포트를 노출하고 다른 스택에서 이를 참조할 수 있습니다. 그러나 저는 그렇게 하지 않고 대신 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