2016-10-26 2 views
2

Docker Compose의 v1에서는 /etc/hosts 파일이 연결된 컨테이너로 업데이트됩니다. 예 :Docker v2에서 연결된 컨테이너를 작성하십시오.

$ cat /etc/hosts 
127.0.0.1 localhost 
::1 localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
172.17.0.2 redis redis_1 c381c79fb9c2 romantic_yonath 
172.17.0.3 48d2ed7033a1 

그러나 v2에서는이 작업이 DNS를 통해 수행되므로 더 이상 항목이 없습니다. 로드 밸런서를 부트 스트랩하기 위해 호스트 테이블을 사용할 수 있습니다. scale 명령과 함께 사용할 때 매우 유용합니다.

컨테이너를 생성하는 동안 이들을 주입하는 방법이 있습니까?

+1

을 작동하는 것 같다. 그것은 당신이 필요로하는 것에 충분할 것입니까? 아니면 다른 것을 필요로합니까? – R0MANARMY

+0

DNS가 라운드 로빈이라고 생각하지 않습니다. 여기에 예제를 만들었습니다. https://github.com/joedborg/docker-compose-scaling 내가 이것을 증명했다고 생각합니까? – jdborg

+0

나는 [docs] (https://docs.docker.com/docker-cloud/apps/service-links/#/discovering-containers-on-the-same-service-or-stack)를 기반으로했습니다. – R0MANARMY

답변

1

Nginx 블로그의 게시물은 Using DNS for Service Discovery with NGINX and NGINX Plus입니다.

NGINX는 다음 재시작 또는 구성 다시로드 (기록의 TTL 값 무시)까지 DNS 레코드를 캐시합니다.

컨테이너를 다시 시작한 후에 새로운 노드로 라우팅 할 수 있다는 것을 보여줍니다.

섹션 변수에 도메인 이름 설정에는 시작시 캐싱에 대한 해결 방법의 예가 나와 있습니다. 그 TTL이 만료 될 때

resolver 10.0.0.2 valid=10s; 

server { 
    location/{ 
     set $backend_servers backends.example.com; 
     proxy_pass http://$backend_servers:8080; 
    } 
} 

당신이 proxy_pass 지시어에 도메인 이름을 지정하는 변수를 사용

는 Nginx에의 도메인 이름을 다시는-해결합니다.

This discussion127.0.0.11은 컨테이너 내부의 확인자의 IP가됩니다.


나는 DNS 변경이 확장 한 후 반영됩니다 확인하기 위해 로컬이 구성을 사용하고,이 라운드 로빈로드 밸런싱을 할 것입니다 DNS 내장

resolver 127.0.0.11 valid=5s; 

server { 
    listen 80; 
    location/{ 
     set $application_servers application; 
     proxy_pass http://$application_servers:8080; 
    } 
} 
+0

굉장합니다. 이 예제를 업데이트하여 작동 여부를 확인하겠습니다. – jdborg

관련 문제