Saya telah menginstal Ubuntu 14.04 baru, dan ingin menggunakan Docker untuk menjalankan barang lama saya yang membutuhkan 12,04. DNS di dalam Docker tidak berfungsi.
Resolv.conf laptop saya terlihat seperti:
nameserver 127.0.0.1
Yang tidak bekerja dengan Docker, rupanya. Karena itu ia mencoba untuk mengatur nameserver ke 8.8.8.8 dan 8.8.4.4; ketika saya melakukannya
$ sudo docker run -i -t ubuntu /bin/bash
Ia mengatakan:
WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it. Using default external servers : [8.8.8.8 8.8.4.4]
Dan tentu saja, di dalam instance Docker, resolv.conf terlihat seperti:
nameserver 8.8.8.8
nameserver 8.8.4.4
Saya dapat melakukan ping ke keduanya dengan sukses dari dalam instance Docker. Namun, tidak ada DNS (mis. ping google.com
Gagal).
keluaran ifconfig di dalam Docker:
eth0 Link encap:Ethernet HWaddr aa:e9:9f:83:9d:92
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::a8e9:9fff:fe83:9d92/64 Scope:Link
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:648 (648.0 B) TX bytes:738 (738.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Sekarang apa?
sumber
Saya tidak menggunakan buruh pelabuhan sendiri, jadi saya biasanya tidak akan bertanya-tanya di sini, tapi saya kebetulan membaca tentang hal itu dan menemukan beberapa dokumentasi buruh pelabuhan yang tampaknya menangani masalah persis ini . Untuk menyimpulkan...
Dokumentasi menyarankan beberapa solusi. Yang pertama adalah menentukan server DNS yang akan digunakan oleh docker daemon untuk kontainer dengan menambahkan baris berikut ke
/etc/default/docker
:di mana DNS yang disediakan bisa menjadi server DNS lokal, seperti 192.168.1.1 (gateway). Kemudian, mulai kembali dengan
Solusi alternatif melibatkan menonaktifkan dnsmasq di NetworkManager dengan mengomentari konfigurasi
/etc/NetworkManager/NetworkManager.conf
seperti ini:lalu, restart keduanya
sumber
/etc/default/docker
tidak ada lagi efeknya. Lihat solusi saya untuk bagaimana menyelesaikannya di dunia post-init.d / pemula./etc/NetworkManager/NetworkManager.conf
tidak ada di Ubuntu 18.04 LTS. : /systemd-resolved
bertindak sebagai server DNS caching secara default dan akan memancingWARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it.
masalah (pengaturan Ubuntu 16.04 tampaknya tidak mengaktifkannya secara default). Solusinya adalah untuk menonaktifkansystemd-resolved
atau menggunakan--dns
opsi ketika memulai wadah seperti yang disebutkan dalam jawaban utama.Saya mengalami ini dalam situasi saya yang khusus
npm install
dari repositori khusus pada VPN , di dalam wadah.npm
tidak dapat melakukan pencarian DNS yang berhasilUbuntu secara default menggunakan
dnsmasq
dimulai oleh NetworkManager untuk cache permintaan DNS, dan mengkonfigurasi/etc/resolv.conf
untuk menunjuk ke instance ini pada127.0.1.1
/etc/resolv.conf
yang menimpa konfigurasi NetworkManager/etc/resolv.conf
secara default mengarahkan Anda ke kontainerdnsmasq
situasinya.docker0
jembatan jaringan, ke server DNS melaluitap0
adaptor VPN .Solusinya :
Tampaknya akan lebih elegan untuk menggunakan NetworkManager dan ini adalah
dnsmasq
contoh captive dalam cara itu dirancang.Beri tahu Docker untuk menggunakan
dnsmasq
instance Anda untuk DNSTambah atau edit file
/etc/docker/daemon.json
untuk memberi tahu buruh pelabuhan untuk menggunakandocker0
adaptor jembatan untuk DNSKonfigurasikan
dnsmasq
instance NM untuk mendengarkan jembatan Docker juga, karena secara default hanya mendengarkan 127.0.1.1 - buat file/etc/NetworkManager/dnsmasq.d/docker-bridge.conf
Saya tidak suka perilaku kasar klien VPN itu dan saya lebih suka hanya menggunakan DNS di akhir VPN untuk pencarian VPN (jika Anda memiliki klien VPN yang sopan yang menggunakan NetworkManager yang dikonfigurasi dengan benar, Anda tidak perlu melakukan ini )
resolv.conf
saat terhubung dan sekarang semua DNS melewatidnsmasq
lagi)Tambahkan file konfigurasi untuk memberi tahu
dnsmasq
permintaan DNS langsung untuk domain Anda dengan tepat - tambahkan file `/etc/NetworkManager/dnsmasq.d/vpn-dns.confSecara opsional, tambahkan domain pencarian untuk domain Anda sehingga Anda dapat menggunakan nama pendek
Mulai kembali NetworkManager dan Docker
Pada titik ini, wadah Docker Anda seharusnya dapat melakukan
nslookup
tanpa masalah saat Anda menggunakan VPN, untuk domain baik di dalam maupun di luar VPN Anda.sumber
cannot unmarshal string into Go value of type []string
ketika me-restart layanan buruh pelabuhan.Inilah cara saya mengatur buruh pelabuhan di server Ubuntu 14.04 saya yang berjalan tanpa kepala.
Saya menjalankan server Ubuntu 14.04 dengan versi buruh pelabuhan berikut diinstal.
File /etc/init/docker.io.conf dan skrip berisi baris berikut:
Jawaban di atas membantu saya menemukan file di atas.
Saya membatalkan komentar berikut ini di /etc/default/docker.io dan menambahkan server DNS lokal saya:
Mulai ulang layanan dengan:
Ran
docker run <image> /bin/bash
Tidak ada pesan dns saat memulai wadah.
Memulai wadah baru, menginstal dnsutils.
Jalankan penggalian dan pesan server adalah server DNS lokal yang benar.
sumber
Saya memiliki masalah serupa, melaporkannya ke StackOverflow . Tampaknya saya tidak dapat meminta
8.8.8.8
server nama yang ditentukan dalam instalasi Docker default Ubuntu; Namun, saya bisa melakukan ping. Dalam hal ini, gunakan server DNS yang sebenarnya bisa Anda tanyakan. Tes dengandan mulai wadah melalui
Saya belum menemukan cara untuk https://askubuntu.com/q/607172/30266 untuk mendapatkan solusi automagic.
sumber
Anda dapat menggunakan resolver DNS lokal host (mis.
dnsmasq
) Dari wadah Docker Anda jika mereka berada di jaringan yang ditentukan pengguna . Dalam hal ini seorang penampung/etc/resolv.conf
akan memiliki nameserver127.0.0.11
(alias server DNS tertanam Docker ), yang dapat meneruskan permintaan DNS ke alamat loopback host dengan benar.Jika Anda menggunakan
docker-compose
, itu akan mengatur jaringan khusus untuk wadah Anda secara otomatis (dengan format file v2 + ). Namun, perlu diketahui bahwa saatdocker-compose
menjalankan kontainer di jaringan yang ditentukan pengguna, wadah itu tetap membangunnya di jaringan default . Untuk menggunakan jaringan khusus untuk build, Anda dapat menentukannetwork
parameter dalam konfigurasi build (memerlukan format file v3.4 + ).sumber