Dengan penggunaan Docker yang meluas dalam beberapa tahun kebelakangan ini, kadangkala kami menghadapi beberapa masalah semasa menggunakan Docker, seperti masalah yang akan kami bincangkan hari ini: Bekas Docker tidak boleh mengakses Internet. Masalah ini sangat biasa apabila menggunakan Docker, tetapi ia juga merupakan masalah yang sangat menjengkelkan dan sakit kepala. Hari ini kami akan berkongsi beberapa sebab mengapa bekas Docker tidak boleh mengakses Internet dan penyelesaiannya.
1. Semak tetapan rangkaian bekas
Pertama, kita perlu menyemak tetapan rangkaian bekas untuk memastikan tetapan rangkaian adalah betul. Apabila kami menggunakan Docker untuk mencipta bekas, kami boleh menetapkan jenis rangkaian dan konfigurasi rangkaian bekas. Jika jenis rangkaian dikonfigurasikan sebagai "tiada", bekas tidak akan dapat mengakses Internet. Dan jika jenis rangkaian dikonfigurasikan sebagai "jambatan", bekas boleh mengakses Internet melalui rangkaian hos.
Kita boleh menggunakan arahan berikut untuk melihat tetapan rangkaian bekas:
docker inspect <容器名或 ID> | grep NetworkMode
Jika hasil output adalah "tiada", maka kita perlu menggunakan arahan berikut untuk menetapkan jenis rangkaian kontena kepada "bridge" :
docker run --net=bridge <镜像名>
Dengan cara ini kontena boleh mengakses Internet melalui rangkaian hos.
2. Semak konfigurasi DNS bekas
Sebab bekas lain tidak boleh mengakses Internet ialah konfigurasi DNS tidak betul. Apabila kami melaksanakan arahan di dalam bekas atau pada hos, kami perlu menggunakan DNS untuk menyelesaikan nama domain. Jika konfigurasi DNS tidak betul, bekas tidak akan dapat menyelesaikan nama domain dan tidak akan dapat mengakses Internet.
Kita boleh menyemak konfigurasi DNS bekas menggunakan arahan berikut:
docker inspect <容器名或 ID> | grep -i dns
Jika output kosong, maka kita perlu menetapkan konfigurasi DNS secara manual. Kami boleh menetapkan konfigurasi DNS secara manual apabila mencipta bekas menggunakan arahan berikut:
docker run --dns=<DNS 服务器> <镜像名>
Dalam arahan di atas, kami boleh mengkonfigurasi pelayan DNS ke alamat pelayan DNS kami sendiri, seperti 8.8.8.8.
3. Semak tetapan tembok api bekas
Kadangkala sebab bekas tidak boleh mengakses Internet juga berkaitan dengan tetapan tembok api bekas. Firewall dalam bekas didayakan secara lalai dan menyekat semua trafik masuk dan keluar.
Kita boleh menyemak tetapan firewall bekas menggunakan arahan berikut:
docker exec <容器名或 ID> iptables -L
Jika firewall didayakan, kita boleh mematikan firewall menggunakan arahan berikut:
docker exec <容器名或 ID> iptables -P INPUT ACCEPT docker exec <容器名或 ID> iptables -P FORWARD ACCEPT docker exec <容器名或 ID> iptables -P OUTPUT ACCEPT docker exec <容器名或 ID> iptables -F
Di atas Maksud arahan adalah untuk menetapkan dasar lalai firewall bekas untuk diterima, dan kemudian kosongkan semua peraturan firewall.
4. Semak tetapan tembok api hos
Jika tiga penyelesaian di atas tidak menyelesaikan masalah, maka kita harus menyemak tetapan tembok api hos. Jika tembok api hos tidak dikonfigurasikan dengan betul, ia mungkin menyekat trafik kontena, menyebabkan bekas tidak dapat mengakses Internet.
Kita boleh menggunakan arahan berikut untuk menyemak tetapan firewall hos:
iptables -L
Jika firewall didayakan, kita boleh menggunakan arahan berikut untuk membuka firewall hos:
iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -F
Arahan di atas bermaksud menetapkan dasar lalai tembok api hos untuk diterima, dan kemudian mengosongkan semua peraturan tembok api.
Ringkasan
Ringkasnya, apabila kita menghadapi masalah bahawa bekas Docker tidak boleh mengakses Internet, kita perlu menyemak tetapan rangkaian, konfigurasi DNS dan tetapan firewall bekas itu terlebih dahulu. Jika ini ok, kita harus menyemak tetapan tembok api hos. Saya harap artikel hari ini akan membantu semua orang yang menghadapi masalah semasa menggunakan Docker.
Atas ialah kandungan terperinci Kongsi beberapa sebab dan penyelesaian mengapa bekas Docker tidak boleh mengakses Internet. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!