Saya mengalami masalah dengan kontainer Docker saya di Ubuntu 14.04 LTS. Docker bekerja dengan baik selama dua hari, dan kemudian tiba-tiba saya kehilangan semua konektivitas jaringan di dalam wadah saya. Keluaran kesalahan di bawah awalnya membuat saya percaya itu karena apt-get sedang mencoba untuk menyelesaikan DNS melalui IPv6.
Saya menonaktifkan IPv6 pada mesin host saya dan masih, menghapus semua gambar, menarik basis ubuntu, dan masih mengalami masalah.
Saya mengubah nameserver /etc/resolve.conf dari server DNS lokal saya ke server DNS publik Google (8.8.8.8 dan 8.8.4.4) dan masih belum berhasil. Saya juga mengatur DNS ke Google di DOCKER_OPTS dari / etc / default / docker dan restart docker.
Saya juga mencoba menarik coreo, dan yum juga tidak bisa menyelesaikan DNS.
Ini aneh karena sementara DNS tidak berfungsi, saya masih mendapatkan respons ketika saya melakukan ping ke server pembaruan yang sama yang apt-get tidak bisa atasi.
Saya tidak berada di belakang proxy, saya menggunakan jaringan lokal yang sangat standar, dan versi Ubuntu ini mutakhir dan segar (saya menginstal dua hari lalu agar lebih dekat dengan buruh pelabuhan).
Saya telah meneliti ini sepenuhnya melalui posting lain tentang masalah stackoverflow dan github, tetapi belum menemukan resolusi. Saya kehabisan ide bagaimana mengatasi masalah ini, adakah yang bisa membantu?
Pesan eror
➜ arthouse git:(docker) ✗ docker build --no-cache .
Sending build context to Docker daemon 51.03 MB
Sending build context to Docker daemon
Step 0 : FROM ubuntu:14.04
---> 5506de2b643b
Step 1 : RUN apt-get update
---> Running in 845ae6abd1e0
Err http://archive.ubuntu.com trusty InRelease
Err http://archive.ubuntu.com trusty-updates InRelease
Err http://archive.ubuntu.com trusty-security InRelease
Err http://archive.ubuntu.com trusty-proposed InRelease
Err http://archive.ubuntu.com trusty Release.gpg
Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Err http://archive.ubuntu.com trusty-updates Release.gpg
Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Err http://archive.ubuntu.com trusty-security Release.gpg
Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Err http://archive.ubuntu.com trusty-proposed Release.gpg
Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Reading package lists...
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-proposed/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-proposed/Release.gpg Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Some index files failed to download. They have been ignored, or old ones used instead.
Wadah IFCONFIG / PING
➜ code docker run -it ubuntu /bin/bash
root@7bc182bf87bb:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:04
inet addr:172.17.0.4 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:4/64 Scope:Link
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:7 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:738 (738.0 B) TX bytes:648 (648.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:65536 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)
root@7bc182bf87bb:/# ping google.com
PING google.com (74.125.226.0) 56(84) bytes of data.
64 bytes from lga15s42-in-f0.1e100.net (74.125.226.0): icmp_seq=1 ttl=56 time=12.3 ms
--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 12.367/12.367/12.367/0.000 ms
root@7bc182bf87bb:/# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=44 time=21.8 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=44 time=21.7 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=44 time=21.7 ms
Selain itu, pembaruan apt-get gagal ketika saya memaksakan IPv4:
root@6d925cdf84ad:/# sudo apt-get update -o Acquire::ForceIPv4=true
Err http://archive.ubuntu.com trusty InRelease
Err http://archive.ubuntu.com trusty-updates InRelease
Err http://archive.ubuntu.com trusty-security InRelease
Err http://archive.ubuntu.com trusty-proposed InRelease
Err http://archive.ubuntu.com trusty Release.gpg
Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Err http://archive.ubuntu.com trusty-updates Release.gpg
Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Err http://archive.ubuntu.com trusty-security Release.gpg
Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Err http://archive.ubuntu.com trusty-proposed Release.gpg
Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Reading package lists... Done
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease
sumber
Jawaban:
Woo, saya menemukan posting di github yang menyelesaikan masalah saya.
Setelah Steve K. menunjukkan bahwa itu sebenarnya bukan masalah DNS dan masalah konektivitas, saya dapat menemukan posting di github yang menjelaskan cara memperbaiki masalah ini.
Rupanya jembatan jaringan docker0 ditutup. Menginstal bridge-utils dan menjalankan yang berikut ini membuat Docker saya berfungsi:
sumber
ip link set down docker0
bukanifconfig docker0 down
dansystemctl restart docker
bukannyaservice docker start
. Untuk menghapus semua gambar, saya lakukandocker rmi $(docker images -q)
/etc/init.d/docker restart
dan itu kembali ke bisnisJika ini masalah DNS resolver, berikut solusinya:
Hal pertama yang harus diperiksa adalah dijalankan
cat /etc/resolv.conf
dalam wadah buruh pelabuhan . Jika memiliki server DNS yang tidak valid, sepertinameserver 127.0.x.x
, maka wadah tidak akan dapat menyelesaikan nama domain menjadi alamat ip, sehinggaping google.com
akan gagal.Hal kedua yang perlu diperiksa dijalankan
cat /etc/resolv.conf
pada mesin host . Docker pada dasarnya menyalin host/etc/resolv.conf
ke wadah setiap kali wadah dimulai. Jadi, jika tuan rumah/etc/resolv.conf
salah, maka wadah buruh pelabuhan juga akan demikian.Jika Anda menemukan bahwa host
/etc/resolv.conf
salah, maka Anda memiliki 2 opsi:Hardcode server DNS di daemon.json. Ini mudah, tetapi tidak ideal jika Anda mengharapkan server DNS berubah.
Perbaiki tuan rumah
/etc/resolv.conf
. Ini sedikit rumit, tetapi dihasilkan secara dinamis, dan Anda tidak melakukan hardcoding pada server DNS.1. Server DNS hardcode di docker daemon.json
Sunting
/etc/docker/daemon.json
Mulai ulang daemon buruh pelabuhan agar perubahan tersebut diterapkan:
sudo systemctl restart docker
Sekarang ketika Anda menjalankan / memulai sebuah wadah, buruh pelabuhan akan diisi
/etc/resolv.conf
dengan nilai-nilai daridaemon.json
.2. Memperbaiki host
/etc/resolv.conf
A. Ubuntu 16.04 dan sebelumnya
Untuk Ubuntu 16.04 dan sebelumnya,
/etc/resolv.conf
secara dinamis dihasilkan oleh NetworkManager.Komentari baris
dns=dnsmasq
(dengan a#
) di/etc/NetworkManager/NetworkManager.conf
Mulai kembali NetworkManager untuk membuat ulang
/etc/resolv.conf
:sudo systemctl restart network-manager
Verifikasi pada tuan rumah:
cat /etc/resolv.conf
B. Ubuntu 18.04 dan yang lebih baru
Ubuntu 18.04 diubah untuk digunakan
systemd-resolved
untuk menghasilkan/etc/resolv.conf
. Sekarang secara default menggunakan cache DNS lokal 127.0.0.53. Itu tidak akan berfungsi di dalam sebuah wadah, jadi Docker akan default ke server DNS 8.8.8.8 Google, yang mungkin rusak untuk orang-orang di belakang firewall./etc/resolv.conf
sebenarnya adalah symlink (ls -l /etc/resolv.conf
) yang menunjuk ke/run/systemd/resolve/stub-resolv.conf
(127.0.0.53) secara default di Ubuntu 18.04.Cukup ganti symlink ke point
/run/systemd/resolve/resolv.conf
, yang mencantumkan server DNS asli:sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Verifikasi pada tuan rumah:
cat /etc/resolv.conf
Sekarang Anda harus memiliki
/etc/resolv.conf
host pada docker yang sah untuk menyalin ke dalam wadah.sumber
systemd
paket ...Dalam upaya menambahkan nilai tambahan ke masalah yang saya alami juga; dengan jawaban alternatif:
Jaringan saya terkait dengan kantor dan pengaturan Google DNS diblokir sehingga wadah dapat melakukan ping alamat IP tetapi bukan nama domain.
Tuan rumah saya
/etc/resolv.conf
awalnya tampak seperti;Ini karena Network Manager melakukan semacam penyamaran dari detail server DNS.
Sayangnya menurut manual buruh pelabuhan buruh pelabuhan akan menyaring semua alamat IP host lokal ketika membangun resolv.conf wadah dan menggantinya dengan IP DNS Google. Yang dalam kasus saya menyebabkan nama domain menjadi terlarang.
Saya harus:
/etc/default/docker
ke default sehingga wadah menggunakan konten resolv.conf host saya sebagai gantinya./etc/NetworkManager/NetworManager.conf
dan komentari barisnyadns=dnsmasq
. Ini agar NM dapat menentukan alamat IP DNS yang sebenarnya, bukan 127.0.0.1.sudo service network-manager restart
.sudo service docker restart
.Menjalankan wadah akan memungkinkannya untuk dilakukan
apt-get update/upgrade
, misalnya.sumber
Kesalahan Anda ada di sini:
Ini bukan kesalahan dengan DNS, sebaliknya sistem Anda mencoba untuk terhubung ke host IPv6 dan gagal. Mungkin karena Anda tidak memiliki akses IPv6 di host Anda. Pencarian alamat IPv6 yang sebenarnya berhasil. (Cermin / arsip ubuntu tersedia untuk IPv6 dan IPv4. Anda cukup beruntung untuk mendapatkan IPv6 karena sistem Anda yakin itu harus berfungsi.)
Anda harus memperbaikinya, dengan menginstal miredo , atau coba lagi hingga mencapai mirror IPv4 Anda.
Sekali lagi hal penting untuk disadari di sini adalah bahwa DNS tidak dapat disalahkan, seperti yang Anda lihat dengan tes ping Anda sendiri.
sumber
Dok resmi Docker memberikan instrumen untuk mengonfigurasi server DNS untuk digunakan oleh Docker
Buka
/etc/default/docker
file untuk diedit:Tambahkan pengaturan untuk Docker:
Ganti
8.8.8.8
dengan server DNS lokal seperti192.168.1.1
. Anda juga dapat menentukan beberapa server DNS. Pisahkan dengan spasi, misalnya:Peringatan: Jika Anda melakukan ini pada laptop yang terhubung ke berbagai jaringan, pastikan untuk memilih server DNS publik.
PS:
nm-tool
dapat digunakan untuk memeriksa server DNS host lokalSimpan dan tutup file.
Mulai kembali daemon Docker.
sumber
/etc/docker/daemon.json
untuk pengaturan daemon buruh pelabuhan seperti dns.Untuk pembaca lain yang datang ke sini saat menggunakan boot2docker, inilah cara saya memperbaikinya. Sebenarnya, jawaban di atas menunjuk saya ke arah yang benar.
Pada dasarnya, untuk beberapa alasan, wadah di dalam boot2docker tidak dapat menyelesaikan nama host.
Jadi saya baru saja me-restart boot2docker dan memulai wadah. Sekarang nama host dapat diselesaikan dengan benar lagi.
Saya kira masalahnya mulai boot2docker sementara jaringan pada host sedang terhubung yang menyebabkan boot2docker untuk memulai dan masuk ke keadaan tidak bekerja.
sumber
Saya memiliki masalah yang sama pada Windows. Perintah ini membuatnya bekerja untuk saya:
docker-machine restart
sumber
Mulai ulang daemon Docker di Debian9
service docker restart
dan koneksi dan jaringan berfungsi dengan baik
sumber
Punya masalah serupa, tetapi juga penyelesaian nama antara kontainer di dalam jaringan yang ditentukan Pengguna tampaknya agak serpihan. Beberapa tidak bisa menyelesaikan apa pun seperti Anda.
Masalahnya adalah pindah / var / lib / docker. Untuk alasan ruang itu dipasang melalui nfs. Menambahkan sistem file lokal dan memindahkan file di sana menyelesaikan masalah.
sumber