Saya sudah mencoba menjalankan Docker build pada berbagai file yang sebelumnya berfungsi sebelumnya, yang sekarang tidak lagi berfungsi.
Segera setelah file Docker menyertakan baris apa pun yang akan menginstal perangkat lunak, itu akan gagal dengan pesan yang mengatakan bahwa paket tersebut tidak ditemukan.
RUN apt-get -y install supervisor nodejs npm
Pesan umum yang muncul di log adalah
Could not resolve 'archive.ubuntu.com'
Tahu mengapa perangkat lunak tidak dapat diinstal?
newgrp docker
alih-alih melakukan log off penuh kemudian masuk setelah memberikan diri sayasudo usermod -aG docker myuserid
... itu kasus tepi untuk yakin bagaimanapun itu terjadiJawaban:
Uncommenting
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
di/etc/default/docker
sebagai Matt Pembawa disarankan tidak TIDAK bekerja untuk saya. Juga tidak menempatkan server DNS perusahaan saya di file itu. Tapi, ada cara lain (baca terus).Pertama, mari kita verifikasi masalahnya:
Jika perintah tampaknya macet, tetapi pada akhirnya memunculkan kesalahan "tidak dapat menyelesaikan 'google.com'", Anda memiliki masalah yang sama dengan saya.
The
nslookup
perintah query DNS Server 8.8.8.8 untuk mengubah alamat teks 'google.com' ke alamat IP. Ironisnya, 8.8.8.8 adalah server DNS publik Google . Jikanslookup
gagal, server DNS publik seperti 8.8.8.8 mungkin diblokir oleh perusahaan Anda (yang saya asumsikan karena alasan keamanan).Anda akan berpikir bahwa menambahkan server DNS perusahaan Anda ke
DOCKER_OPTS
dalam/etc/default/docker
harus melakukan trik, tetapi untuk alasan apa pun, itu tidak berhasil untuk saya. Saya menjelaskan apa yang berhasil untuk saya di bawah ini.SOLUSI :
Di host (saya menggunakan Ubuntu 16.04), cari tahu alamat server DNS primer dan sekunder:
Menggunakan alamat ini, buat file
/etc/docker/daemon.json
:Taruh ini di
/etc/docker/daemon.json
:Keluar dari root:
Sekarang restart buruh pelabuhan:
VERIFIKASI :
Sekarang periksa apakah menambahkan
/etc/docker/daemon.json
file memungkinkan Anda menyelesaikan 'google.com' menjadi alamat IP:REFERENSI :
Saya mendasarkan solusi saya pada artikel oleh Robin Winslow, yang berhak mendapatkan semua pujian atas solusinya. Terima kasih, Robin!
"Perbaiki konfigurasi DNS jaringan Docker." Robin Winslow. Diakses tanggal 09 September 2016. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
sumber
nslookup google.com 8.8.8.8
Dalam kasus saya, saya mendapat kesalahan iniconnection timed out; no servers could be reached
/etc/default/docker
tidak berhasil bagi sebagian orang adalah (mengutip komentar dari file)# THIS FILE DOES NOT APPLY TO SYSTEMD
Setelah banyak pusing saya menemukan jawabannya.
Could not resolve 'archive.ubuntu.com'
dapat diperbaiki dengan melakukan perubahan berikut:Batalkan komentar pada baris berikut
/etc/default/docker
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
Mulai ulang layanan Docker
sudo service docker restart
Hapus semua gambar yang memiliki cache pengaturan DNS yang tidak valid.
Penghargaan diberikan kepada Andrew SB
sumber
docker build --no-cache=true ...
docker build --no-cache=true -t docker-whale .
tapi sepertinya tidak ada perbedaan yang terjadi.Saya mengalami masalah yang sama, tetapi entri yang tidak mengomentari / etc / default / docker dns atau mengedit /etc/resolv.conf di build container atau /etc/docker/daemon.json membantu saya.
Tetapi setelah saya membangun dengan opsi --network = host, penyelesaiannya baik-baik saja.
Mungkin ini akan membantu seseorang lagi.
sumber
Saya percaya bahwa jawaban Matt Carrier adalah solusi yang tepat untuk masalah ini. Namun, setelah menerapkan itu, saya masih mengamati perilaku yang sama:
could not resolve 'archive.ubuntu.com'
.Hal ini membuat saya akhirnya menemukan bahwa jaringan tempat saya terhubung memblokir DNS publik. Solusi untuk masalah ini adalah mengonfigurasi container Docker saya untuk menggunakan server nama yang sama dengan yang digunakan host saya (mesin tempat saya menjalankan Docker).
Bagaimana saya melakukan triase:
docker run -it docker/whalesay bash
ping 172.217.4.238
(google.com)ping google.com
Dalam kasus saya, yang pertama
ping
menghasilkan tanggapan, yang kedua tidak.Bagaimana saya memperbaiki:
Setelah saya menemukan bahwa DNS tidak berfungsi di dalam penampung, saya memverifikasi bahwa saya dapat menduplikasi perilaku yang sama pada host.
nslookup google.com
diselesaikan dengan baik pada tuan rumah. Tapi,nslookup google.com 8.8.8.8
ataunsloookup google.com 8.8.4.4
waktu habis.Selanjutnya, saya menemukan server nama yang digunakan host saya dengan menjalankan
nm-tool
(di Ubuntu 14.04). Dalam vena dari umpan balik yang cepat, aku mulai menaiki contoh gambar lagi, dan menambahkan alamat IP dari server nama file resolv.conf wadah ini:sudo vi /etc/resolv.conf
. Setelah disimpan, saya mencoba melakukan ping lagi (ping google.com
) dan kali ini berhasil!Harap diperhatikan bahwa perubahan yang dibuat pada resolv.conf penampung tidak terus-menerus dan akan hilang saat penampung dimulai ulang. Dalam kasus saya, solusi yang lebih tepat adalah menambahkan alamat IP server nama jaringan saya ke file host
/etc/default/docker
.sumber
nmcli device show <interfacename> | grep IP4.DNS
(Ubuntu> = 15) dannmcli dev list iface <interfacename> | grep IP4
(Ubuntu <15). Kredit: Marty Fried .Setelah menambahkan ip dns lokal ke file buruh pelabuhan default itu mulai berfungsi untuk saya ... silakan temukan langkah-langkah di bawah ini ...
Sekarang lanjutkan dan bangun buruh pelabuhan ... :)
sumber
Bagi siapa pun yang juga mengalami masalah ini, saya menyelesaikan masalah saya dengan mengedit
/etc/default/docker
file, seperti yang disarankan oleh jawaban dan pertanyaan lain. Namun saya tidak tahu IP apa yang akan digunakan sebagai DNS.Hanya setelah beberapa saat saya menemukan bahwa saya harus menjalankan
ifconfig docker
host untuk menunjukkan IP untuk antarmuka jaringan buruh pelabuhan.Itu
172.17.0.1
dalam kasus saya. Semoga ini bisa membantu siapa saja yang juga mengalami masalah ini.sumber
ifconfig docker0
Saya menemukan jawaban ini setelah beberapa Googleing. Saya menggunakan Windows, jadi beberapa jawaban di atas tidak berlaku untuk sistem file saya.
Pada dasarnya menjalankan:
Yang hanya menimpa server nama yang digunakan dengan
8.8.8.8
saya percaya. Itu berhasil untuk saya!Berdasarkan beberapa komentar, Anda mungkin harus menjadi root. Untuk melakukan itu, terbitkan
sudo -i
.sumber
ssh
tidak ada?sudo -i
setelah Anda masukSaya hanya ingin menambahkan tanggapan terlambat untuk siapa pun yang menemukan masalah ini dari mesin telusur.
JANGAN lakukan ini: Saya biasanya memiliki opsi di / etc / default / docker untuk disetel
iptables=false
. Ini karena ufw tidak berfungsi (semuanya dibuka meskipun hanya 3 port yang diizinkan) jadi saya secara membabi buta mengikuti jawaban untuk pertanyaan ini: Uncomplicated Firewall (UFW) tidak memblokir apa pun saat menggunakan Docker dan ini, yang ditautkan di komentarSaya memiliki pemahaman yang sangat rendah tentang aturan iptables / nat / routing secara umum, oleh karena itu mengapa saya mungkin melakukan sesuatu yang tidak rasional.
Ternyata saya mungkin salah mengonfigurasinya dan mematikan resolusi DNS di dalam penampung saya. Ketika saya menjalankan terminal kontainer interaktif:
docker run -i -t ubuntu:14.04 /bin/bash
Saya mendapatkan hasil ini:
Mengembalikan semua konfigurasi ufw saya (before.rules), menonaktifkan ufw dan menghapus iptables = false dari / etc / default / docker memulihkan fungsionalitas resolusi DNS dari wadah.
Sekarang saya tidak sabar untuk mengaktifkan kembali fungsi ufw dengan mengikuti petunjuk ini .
sumber
Saya memiliki masalah yang sama, dan mencoba langkah-langkah yang disebutkan, tetapi tampaknya tidak ada yang berfungsi sampai menyegarkan pengaturan jaringan.
Langkah langkah:
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ip-masq=true"
ke/etc/default/docker
.iptables -t nat -F POSTROUTING
. Setelah menjalankan ini, restart buruh pelabuhan dan itu akan menginisialisasi tabel nat dengan rentang IP baru.sumber
Masalah yang sama untuk saya (di Ubuntu Xenial).
docker run --dns ...
untuk kontainer bekerja.docker build
(pembuatan pelabuhan dll.) Tidak berhasil.Setelah menganalisis log buruh pelabuhan (
journalctl -u docker.service
) jika ditemukan beberapa peringatan tentang resolvconf buruk diterapkan.Setelah itu saya menemukan bahwa nameserver perusahaan kami ditambahkan ke antarmuka jaringan tetapi tidak di resolvconf.
Menerapkan solusi ini Bagaimana cara mengkonfigurasi DNS statis saya di antarmuka? (askubuntu) , yaitu menambahkan server nama ke
/etc/resolvconf/resolv.conf.d/tail
Setelah memperbarui resolvconf (atau reboot).
bash docker run --rm busybox nslookup google.com
bekerja secara instan.
Semua build docker-compose saya berfungsi sekarang.
sumber
Saya mendapat masalah yang sama hari ini, saya baru saja menambahkan baris di bawah ini ke / etc / default / docker
dan kemudian saya me-restart Laptop saya.
Dalam kasus saya me-restart daemon docker tidak cukup bagi saya, saya harus me-restart Laptop saya untuk membuatnya berfungsi.
sumber
Sebelum menghabiskan terlalu banyak waktu untuk solusi lainnya, cukup restart Docker dan coba lagi.
Memecahkan masalah untuk saya, menggunakan Docker Desktop untuk Windows di Windows 10.
sumber
Saya telah berjuang untuk beberapa waktu dengan ini sekarang juga, tetapi inilah yang memecahkannya untuk saya
Ubuntu 16.04 x64
. Saya harap ini juga menghemat waktu seseorang.Masuk
/etc/NetworkManager/NetworkManager.conf
: beri komentar#dns=dnsmasq
Buat (atau modifikasi)
/etc/docker/daemon.json
:sudo service docker restart
sumber
Di sistem saya (
macOS High Sierra 10.13.6
denganDocker 2.1.0.1
) ini karena proxy perusahaan.Saya menyelesaikan ini dengan dua langkah:
Preferences>Proxies
Tambahkan pengaturan yang sama ke config.json Anda di dalam
~/.docker/config.json
seperti:sumber