O Docker substitui meu arquivo /etc/resolv.conf dentro dos contêineres

9

Eu quero definir o /etc/resolv.conf do meu contêiner para:

nameserver 208.67.222.222
nameserver 208.67.220.220

Meu Dockerfile tem a seguinte linha:

ADD resolv.conf /etc/resolv.conf

Este arquivo adicionado contém os nameservers corretos.

O /etc/resolv.conf do host do meu Docker contém as informações corretas.

Estou executando o contêiner assim:

docker run -itd --cap-add=NET_ADMIN --device /dev/net/tun \
-v /home/pi/share/ovpn:/ovpn \
--privileged --network=internet_disabled --name vpn-client \
--dns=208.67.222.222 \
openvpn-client_nat-gateway /bin/bash

Apesar de tudo isso, o contêiner fornece essa saída:

root@642b0f4716ba:/# cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0

É somente depois que eu mudo o resolv.conf manualmente de dentro do container (ou com o docker exec) que ele parece certo.

Eu prefiro evitar ter que consertá-lo com um comando exec. Alguém tem uma ideia do que está acontecendo aqui?

    
por Duncan Marshall 27.02.2017 / 18:19

3 respostas

6

AFAIK, a janela de encaixe substitui alguns arquivos em uma imagem quando é iniciada , mesmo se eles forem ADDed no Dockerfile. Isso com certeza inclui /etc/hosts , e provavelmente o mesmo acontece com /etc/resolv.conf também. Isso aparentemente é usado para construir corretamente a rede "interna" padrão do Docker (para que as imagens vejam umas às outras, mas não ao host, etc.) Se você está realmente certo você deseja sobrescrever / modificar algumas das esses arquivos, acredito que você deve fazer isso como parte das ações de tempo de execução, que é parte da linha CMD . Por exemplo:

...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
        your_old_commands...
    
por 01.03.2017 / 15:45
4

Como posso ver, você está usando user-defined networks e a versão do Docker Engine > = 1.10. Então, da documentação do mecanismo de docker oficial sobre Embedded DNS server in user-defined networks :

These --dns IP addresses are managed by the embedded DNS server and will not be updated in the container's /etc/resolv.conf file.

Seu dns precisa funcionar, mas você não verá nenhum arquivo de configuração.

Referências .

    
por 07.03.2017 / 15:38
0

Eu resolvi o problema se é o aplicativo da web para contêineres no Azure.

Existem 2 containers mate . Kudu e o host

Etapas

1.Instale o ssh do seu arquivo docker (também inclua uma configuração sshd)

2.create um containerstart.sh (que atualiza o resolv.conf)

3.Configure o ponto de entrada lá dentro

Agora o host resolv.conf é atualizado e você pode usar qualquer dns que desejar

PS: Se você não pode pegar o DNS personalizado na rede, não se preocupe. Nós também não pudemos. Pode ser necessário reiniciar se você estiver usando um ambiente ASE

    
por 31.08.2018 / 12:45

Tags