Docker menimpa file /etc/resolv.conf saya di dalam kontainer

17

Saya ingin mengatur resin/rpi-raspbian:jessiepenampung saya /etc/resolv.confke:

nameserver 208.67.222.222
nameserver 208.67.220.220

Dockerfile saya memiliki baris berikut:

ADD resolv.conf /etc/resolv.conf

File yang ditambahkan ini berisi server nama yang benar.

Tuan rumah Docker saya /etc/resolv.confmengandung informasi yang benar.

Saya menjalankan wadah seperti ini:

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

Terlepas dari semua ini, wadah memberikan hasil ini:

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

Hanya setelah saya mengubah resolv.conf secara manual dari dalam wadah (atau dengan docker exec) yang terlihat benar.

Saya lebih suka menghindari memperbaikinya dengan perintah exec. Adakah yang tahu apa yang terjadi di sini?

Duncan Marshall
sumber
Ada beberapa kasus yang dijelaskan pada wiki mereka yang dapat menjelaskan situasi Anda.
Julie Pelletier
Lihatlah pertanyaan saya dan jawabannya.
Zeinab Abbasimazar

Jawaban:

14

AFAIK, buruh pelabuhan menimpa beberapa file dalam gambar ketika dimulai , bahkan jika mereka TAMBAH di Dockerfile. Ini pasti termasuk /etc/hosts, dan kemungkinan besar hal yang sama terjadi /etc/resolv.confjuga. Ini tampaknya digunakan untuk membangun dengan benar jaringan "internal" default Docker (agar gambar saling melihat, tetapi bukan host, dll.) Jika Anda benar - benar yakin ingin mengganti / memodifikasi beberapa file itu, saya yakin Anda harus lakukan itu sebagai bagian dari tindakan runtime, itu adalah sebagai bagian dari CMDbaris. Sebagai contoh:

...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
        your_old_commands...
alias
sumber
3
Ini benar. /etc/resolv.confdisalin dari host ketika sebuah wadah dimulai.
wisbucky
4

Seperti yang saya lihat Anda menggunakan user-defined networksdan Docker Engine versi> = 1.10. Jadi dari dokumentasi resmi mesin dok tentang Embedded DNS server in user-defined networks:

Alamat IP --dns ini dikelola oleh server DNS tertanam dan tidak akan diperbarui dalam file /etc/resolv.conf di dalam penampung.

Dns Anda harus berfungsi, tetapi Anda tidak akan melihat file konfigurasi apa pun.

Referensi .

Thiago Almeida
sumber
0

Saya telah memecahkan masalah jika ini adalah aplikasi web untuk kontainer di Azure.

Ada 2 wadah jodoh . Kudu dan tuan rumahnya

Langkah

1. Instal ssh dari file docker Anda (juga sertakan konfigurasi sshd)

2. buat sebuah contenterstart.sh (yang memperbarui resolv.conf)

3. Atur titik masuk di dalam sana

Sekarang host resolv.conf diperbarui dan Anda dapat menggunakan dns yang Anda inginkan

PS: Jika Anda tidak dapat mengambil DNS khusus di jaringan, jangan khawatir. Kami juga tidak bisa. Mungkin perlu mengatur ulang jika Anda menggunakan lingkungan ASE

Rıfat Erdem Sahin
sumber