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


17

Quero definir meu resin/rpi-raspbian:jessiecontêiner /etc/resolv.confpara:

nameserver 208.67.222.222
nameserver 208.67.220.220

Meu Dockerfile possui a seguinte linha:

ADD resolv.conf /etc/resolv.conf

Este arquivo adicionado contém os servidores de nomes corretos.

Meu host do Docker /etc/resolv.confconté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 esta saída:

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

Somente depois de alterar o resolv.conf manualmente de dentro do contêiner (ou com o executor do docker) é que ele parece certo.

Prefiro evitar corrigi-lo com um comando exec. Alguém tem uma idéia do que está acontecendo aqui?


Existem alguns casos descritos em seu wiki que podem explicar sua situação.
— Julie Pelletier

Dê uma olhada na minha pergunta e na resposta.
— Zeinab Abbasimazar 15/08

Respostas:


14

AFAIK, a janela de encaixe substitui alguns arquivos em uma imagem quando ela é iniciada , mesmo se eles foram adicionados ao Dockerfile. Isso com certeza inclui /etc/hosts, e provavelmente o mesmo acontece /etc/resolv.conftambém. Aparentemente, isso é usado para criar adequadamente a rede "interna" padrão do Docker (para que as imagens se vejam, mas não o host etc.). Se você realmente tem certeza de que deseja substituir / modificar alguns desses arquivos, acredito que você deve faça isso como parte das ações de tempo de execução, como parte da CMDlinha. Por exemplo:

...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
        your_old_commands...

3
Isto está certo. /etc/resolv.confé copiado do host quando um contêiner é iniciado.
— wisbucky

4

Como posso ver, você está usando a user-defined networksversão do Docker Engine> = 1.10. Portanto, a partir da documentação oficial do docker engine sobre Embedded DNS server in user-defined networks:

Esses endereços IP --dns são gerenciados pelo servidor DNS incorporado e não serão atualizados no arquivo /etc/resolv.conf do contêiner.

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

Referências .


0

Resolvi o problema se for o aplicativo Web de contêineres no Azure.

Existem 2 recipientes mate . Kudu e o anfitrião

Passos

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

2. crie um Containerstart.sh (que atualiza o resolv.conf)

3. Defina 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 conseguir pegar o DNS personalizado na rede, não se preocupe. Nós também não. Pode ser necessário reiniciar se você estiver usando um ambiente ASE

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.