O Docker não pode resolver hosts que exigem vários servidores de nomes

1

Estou executando um contêiner Docker que clona alguns repositórios git e constrói um projeto dentro de si.

Ele clona o código de dois repositórios diferentes: um é público github.com e o outro é privado my.companys.github.enterprise.net e só é acessível por VPN.

No meu resolv.conf , tenho 2 servidores de nomes: um para serviços públicos e outro para VPN:

nameserver 8.8.8.8
nameserver 10.10.3.3

Quando tento clonar repositórios dentro do contêiner do Docker, ele só pode resolver github.com repositórios e não é possível resolver my.companys.github.enterprise.net repositórios.

Se eu alternar as linhas no meu resolv.conf , ele só poderá resolver my.companys.github.enterprise.net e não github.com .

Existe uma maneira de permitir que o Docker resolva ambos os links para repositórios usando dois servidores de nomes diferentes de resolv.conf em vez de apenas tentar o primeiro?

    
por SergeyOvchinnik 15.12.2016 / 18:29

1 resposta

1

A sua confusão é que nameserver entradas em /etc/resolv.conf são consideradas equivalentes (isto é, espelhos, e fornecerão as mesmas respostas, independentemente de qual delas seja solicitada). Se um servidor de nomes responder com "isso não existe", o código de resolução é feito, ele não tenta outros servidores de nomes procurando por uma resposta diferente. O código do resolver está na libc e é muito simples.

A solução mais fácil para consertar isso é executar um servidor de nomes local no Docker ( BIND ou unbound pacotes) que tenha inteligência para saber sobre o espaço de nome público e o "universo alternativo" que é o seu espaço de nome privado, geralmente configurado usando zonas de encaminhamento ou "stub". O Google é seu amigo para configurar isso. Em seguida, tenha apenas uma entrada nameserver em /etc/resolv.conf que aponta para 127.0.0.1 .

    
por 16.12.2016 / 00:29