2017-01-18 2 views
6

저는 "사용자 정의"브리지 네트워크의 "Ubuntu 16.10 Server"에서 2.9 (yml 버전 2.1)의 여러 컨테이너를 실행하고 있습니다. 대부분의 컨테이너는 내부적으로 동일한 포트를 사용하기 때문에 "호스트"네트워크 드라이버를 사용할 방법이 없습니다. 내 컨테이너는 모두 전용 링크 links 속성을 사용하여 링크입니다.호스트 DNS 서버를 사용하는 Docker-compose 컨테이너

하지만 내 컨테이너 외부에 노출 된 서비스에 액세스해야합니다. 이 서비스에는 회사의 DNS 서버에 등록 된 전용 URL이 있습니다. 공개 DNS를 사용하고 컨테이너에서 공공 서비스에 도달하는 데 문제가 없지만 개인 DNS에는 연결할 수 없습니다.

컨테이너의 개인 DNS를 사용하는 해결책을 알고 계십니까? 또는 호스트의 네트워크 DNS 구성을 사용하는 것이 더 좋습니다.

추신 : 물론 내 서비스의 extra_hosts 속성을 내 docker-compose.yml 파일에 사용하여 회사의 서비스에 연결할 수 있습니다. 그러나 그것은 확실히 DNS를 갖는 목표는 아닙니다. 내 서비스를 YML 파일에 등록하고 싶지 않고 서비스 IP가 회사에서 업데이트 될 때마다 업데이트하고 싶지 않습니다.

상황 :

  • 호스트 : 우분투 16.10 서버
  • 도커 엔진 : 1.12.6
  • 도커 작성 : 1.9.0
  • 고정 표시기-compose.yml : 2.1
  • 네트워크 : 소유 브리지.

고정 표시기-compose.yml 파일 (추출물) :

version: '2.1' 
    services: 
    nexus: 
    image: sonatype/nexus3:$NEXUS_VERSION 
    container_name: nexus 
    restart: always 
    hostname: nexus.$URL 
    ports: 
     - "$NEXUS_81:8081" 
     - "$NEXUS_443:8443" 
    extra_hosts: 
     - "repos.private.network:192.168.200.200" 
    dns: 
     - 192.168.3.7 
     - 192.168.111.1 
     - 192.168.10.5 
     - 192.168.10.15 
    volumes_from: 
     - nexus-data 
    networks: 
     - pic 

    networks: 
    pic: 
     driver: bridge 
     ipam: 
     driver: default 
     config: 
      - subnet: 172.18.0.0/16 
      gateway: 172.18.0.1 

나는 운이없이, 함께하고 pic 네트워크에 대한 ipam 구성없이 시도했다. 제대로

docker exec -ti nexus curl another-service.private.network 반환 curl: (6) Could not resolve host: another-service.private.network; Name or service not known 호스트에서 curl another-service.private.network 동안 해당 HTML 페이지를 반환하는이 서비스에서 제공하는 HTML 페이지를 docker exec -ti nexus curl repos.private.network 반환 :

는 & 결과를 테스트합니다.

"당연히"another-service.private.network은 4 대의 DNS 서버 (192.168.3.7, 192.168.111.1, 192.168.10.5, 192.168.10.15)에 알려져 있습니다.

건배, 올리비에.

답변

3

docker-compose를 실행중인 환경을 Mac, Windows 또는 Unix와 같이 지정하지 않으므로 변경 사항이 무엇인지에 따라 조금씩 다릅니다. 또한 사용자가 만든 브리지 네트워크의 고정 다리 네트워크에서 기본 브리지 네트워크를 사용하고 있는지 여부를 지정하지 않습니다.

기본적으로 Docker는 기본적으로 Docker Host의 DNS 확인을 컨테이너에 매핑해야합니다.따라서 Docker Host가 개인 DNS 주소를 확인할 수 있다면 이론적으로 컨테이너도 가능해야합니다.

공식 Docker DNS 문서를 읽는 것이 좋습니다. 상당히 합리적입니다. 기본 Docker 브리지 네트워크는 Here이고, 사용자가 만든 브리지 네트워크는 here입니다.

Docker for Mac, Docker Machine 또는 Docker for Windows를 사용하여 실행중인 경우 Docker 호스트가 실제로 컴퓨터가 아닌 실제 상자에서 실행중인 것을 기억해야하므로 약간의 문제가 있습니다. VM에 올바른 DNS 확인 옵션이 설정되도록합니다. DNS 해결 방법을 변경하려면 컨테이너를 다시 시작해야합니다.

docker-compose을 사용하여 모든 기본 설정을 무시할 수 있습니다.

version: 2 
services: 
application: 
    dns: 
    - 8.8.8.8 
    - 4.4.4.4 
    - 192.168.9.45 

당신은 이러한 기능 here에 대한 문서를 찾을 수 있습니다 : 그것은 명시 적으로 예를 들어 등 DNS 서버, DNS 검색 옵션을 설정하기위한 전체 옵션이 있습니다.

+0

안녕하세요 @ 롭, 답변 해 주셔서 감사합니다. 원래의 포스트를 편집하여 내 conf (Ubuntu 16.10 서버에서 커스텀 브리지로 실행 중)에 대한 세부 사항을 추가합니다. – Olivier

관련 문제