Berkongsi ruang nama rangkaian bekas VPN memberi aplikasi anda antara muka dan laluan terowong. Ia tidak memberinya penyelesai terowong, atau salinan bergabung apa-apa lagi pada hos. Jurang itu menghasilkan kegagalan yang sangat khusus: nama awam diselesaikan, nama dalaman tidak, dan aplikasi yang gagal kelihatan menggunakan pelayan DNS yang salah, kerana memang begitu. Pembaikan biasanya lebih kecil daripada yang dicadangkan diagnosis.

Langkah 1: Uji dari aplikasi, bukan dari hos

Jalankan carian di dalam bekas yang bermasalah, bukan pada hos dan bukan dalam pelayar. docker exec app-container getent hosts db.internal menjawab satu-satunya soalan yang penting: apa yang dipulangkan penyelesai proses ini.

Jika hos menyelesaikan nama itu dan bekas tidak, anda telah menemui kerosakan. Semua selepas ini ialah memilih cara yang disokong untuk membaikinya.

Langkah 2: Baca model yang disokong runtime

Dokumentasi rangkaian Docker merekodkan sekatan pada bendera DNS untuk bekas yang berkongsi mod rangkaian bekas lain. Dalam Compose, network_mode: service:vpn mengikat aplikasi kepada ruang nama bekas VPN, dan bagi setiap perkhidmatan dns tetapan tidak berkelakuan seperti perkhidmatan biasa. Penyelesaian yang anda dapat ialah yang dimiliki ruang nama dikongsi.

Rangkaian jambatan yang ditentukan pengguna juga menggunakan DNS terbina dalam Docker secara berbeza daripada jambatan lalai. Itulah sebabnya dns klausa yang disalin daripada contoh jambatan yang berfungsi boleh tidak melakukan apa-apa dalam tindanan dikongsi. Semak susunan sebelum menyalin klausa.

Alamat gelung balik sentiasa merujuk konteks rangkaian berkenaan. Di dalam ruang nama dikongsi, 127.0.0.1 bukan penyelesai hos.

Langkah 3: Ikuti pertanyaan hingga penerimanya

Baca konfigurasi penyelesai aplikasi, kemudian mana-mana DNS disulitkan khusus aplikasi yang dibawanya, kerana aplikasi yang menjalankan penyelesainya sendiri mengabaikan fail yang anda sunting. Kemudian semak sama ada penyelesai yang dipilih boleh dicapai di bawah laluan dan dasar tembok api VPN. Alamat penyelesai di seberang terowong tidak berguna jika ruang nama tiada laluan ke sana. Sahkan penerima sebelum menyunting mana-mana fail.

Halaman pemeriksaan IP dalam pelayar tidak dapat memberitahu ke mana pertanyaan nama pergi. Ia memberitahu ke mana satu sambungan HTTP pergi.

Langkah 4: Baiki dua kelas kegagalan secara berbeza

Jika nama perkhidmatan gagal manakala nama awam berfungsi, masalahnya ialah penemuan perkhidmatan di dalam rangkaian bekas, bukan senarai penyelesai awam. Menukar setiap alamat DNS awam tidak akan mencipta rekod yang tidak pernah diminta oleh mekanisme penemuan rangkaian.

Jika kedua-dua kelas gagal, mulakan dengan kebolehcapaian penyelesai. Jika hanya satu gagal, mulakan dengan mekanisme penemuan. Kedua-duanya mempunyai pemilik berbeza, sebab itu satu pembaikan tidak pernah meliputi kedua-duanya.

Langkah 5: Uji semula selepas penciptaan semula

Tukar konfigurasi melalui mekanisme yang disokong runtime, kemudian cipta semula bekas dan bukannya menyunting fail di dalam bekas yang berjalan. Uji nama peribadi baharu, nama awam baharu dan permintaan aplikasi yang menyusuli carian. Suntingan pada /etc/resolv.conf di dalam bekas hilang semasa penciptaan semula dan akan meyakinkan anda bahawa pembaikan berjaya sedangkan ia tidak.

Catat pemilik penyelesai dan ruang nama yang dijangka di sebelah takrif rangkaian dikongsi. Orang seterusnya akan memerlukan kedua-duanya.

Artikel berkaitan