Docker ialah enjin kontena aplikasi sumber terbuka yang membolehkan pembangun membina, menggunakan dan menjalankan aplikasi. Aplikasi kontena selalunya terdiri daripada berbilang komponen yang perlu berkomunikasi antara satu sama lain untuk menyelesaikan tugas. Walau bagaimanapun, apabila menggunakan Docker, kadangkala anda menghadapi masalah bahawa nama domain tidak dapat diselesaikan, yang mengakibatkan ketidakupayaan untuk berkomunikasi antara bekas atau ketidakupayaan untuk menyambung ke perkhidmatan luaran. Dalam artikel ini, kami akan membincangkan beberapa punca dan penyelesaian biasa untuk membantu anda menyelesaikan isu ini dengan cepat.
Dalam bekas Docker, resolusi nama domain biasanya diselesaikan melalui pelayan DNS. Apabila Docker tidak dapat menyelesaikan nama domain, ia mungkin disebabkan oleh kegagalan pelayan DNS atau ketidakstabilan rangkaian. Untuk menyelesaikan masalah ini, anda boleh melakukan perkara berikut:
1.1 Semak konfigurasi pelayan DNS
Mula-mula, anda boleh menyemak sama ada konfigurasi DNS Docker adalah betul. Anda boleh menjalankan arahan berikut dalam bekas:
cat /etc/resolv.conf
untuk melihat sama ada pelayan DNS dikonfigurasikan dengan betul.
Jika pelayan DNS salah konfigurasi, anda boleh menentukan alamat pelayan DNS yang betul dengan menambahkan pilihan --dns
apabila daemon Docker dimulakan. Contohnya:
dockerd --dns 8.8.8.8
2.2 Ubah suai konfigurasi DNS bekas
Docker juga menyediakan kaedah untuk menetapkan konfigurasi DNS bekas. Anda boleh menentukan alamat pelayan DNS semasa membuat bekas menggunakan pilihan --dns
. Contohnya:
docker run --dns 8.8.8.8 nginx
Selain itu, anda juga boleh mengkonfigurasi alamat pelayan DNS dalam fail /etc/docker/daemon.json
. Contohnya:
{ "dns": ["8.8.8.8", "8.8.4.4"] }
Selepas memulakan semula daemon Docker, konfigurasi ini akan berkuat kuasa.
Bekas Docker dijalankan pada hos Jika sambungan rangkaian hos tidak stabil, bekas Docker mungkin tidak dapat mengakses perkhidmatan luaran atau berkomunikasi dengannya wadah lain. Berikut adalah beberapa penyelesaian yang mungkin:
2.1 Semak sambungan rangkaian hos
Anda boleh menjalankan perintah ping
pada mesin hos untuk menguji sambungan rangkaian. Contohnya:
ping www.baidu.com
Jika anda tidak dapat menyambung, anda boleh cuba memulakan semula hos atau hubungi pentadbir rangkaian untuk menyelesaikan masalah.
2.2 Semak konfigurasi jambatan Docker
Docker mempunyai mod rangkaian lalai yang dipanggil jambatan, dan bekas berkomunikasi dengan hos dan bekas lain melalui jambatan ini. Jika konfigurasi jambatan tidak betul, bekas mungkin tidak dapat menyelesaikan nama domain, jadi anda boleh melihat konfigurasi jambatan Docker pada mesin hos dan membuat pelarasan. Anda boleh melihatnya dengan arahan berikut:
docker network inspect bridge
Jika terdapat masalah, anda boleh menggunakan arahan berikut untuk mencipta semula jambatan:
docker network create bridge
Dalam sesetengah kes, isu cache resolusi nama domain mungkin berlaku apabila berkomunikasi antara bekas dan perkhidmatan luaran. Ini boleh menyebabkan nama domain gagal diselesaikan atau keputusan resolusi DNS ditangguhkan. Jika masalah sedemikian berlaku, anda boleh melakukan operasi berikut:
3.1 Kosongkan cache DNS
Anda boleh laksanakan arahan berikut dalam bekas untuk mengosongkan cache DNS:
/etc/init.d/nscd restart
Jika anda menghadapi masalah ini pada mesin hos, anda boleh mencuba arahan berikut:
sudo service dns-clean restart
3.2 Ubah suai ambang cache DNS
Jika terdapat kelewatan dalam DNS keputusan resolusi, anda boleh cuba mengubah suai ambang cache DNS . Anda boleh menjalankan arahan berikut dalam bekas:
echo 2000 > /proc/sys/net/ipv4/neigh/default/gc_stale_time
Ini akan menetapkan ambang cache DNS kepada 2000 milisaat.
Ringkasan
Apabila menggunakan Docker, adalah perkara biasa untuk menghadapi masalah tidak dapat menyelesaikan nama domain. Masalah ini mungkin disebabkan oleh pelbagai faktor seperti konfigurasi pelayan DNS, sambungan rangkaian atau cache resolusi DNS. Terdapat banyak cara untuk menyelesaikan masalah ini, yang boleh diselesaikan dengan menyemak konfigurasi pelayan DNS, mengubah suai konfigurasi DNS kontena, menyemak sambungan rangkaian hos, menyemak konfigurasi jambatan Docker, mengosongkan cache DNS, atau mengubah suai ambang cache DNS. Saya harap penyelesaian yang disediakan dalam artikel ini dapat membantu anda menyelesaikan masalah dengan cepat dan menggunakan enjin kontena Docker dengan lebih baik.
Atas ialah kandungan terperinci Sebab dan penyelesaian mengapa docker tidak dapat menyelesaikan nama domain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!