Apabila menggunakan Docker untuk membina persekitaran aplikasi, anda berkemungkinan menghadapi masalah sedemikian: aplikasi dimulakan dalam Docker, tetapi ia tidak boleh diakses melalui port yang ditentukan pada hos.
Masalah ini sebenarnya disebabkan oleh mekanisme pengikatan pelabuhan Docker. Aplikasi dalam bekas Docker terikat pada alamat IP bekas secara lalai, dan hos tidak boleh diakses melalui alamat IP ini. Oleh itu, pemetaan port diperlukan untuk memetakan port dalam bekas kepada hos supaya aplikasi pada hos boleh mengakses aplikasi dalam bekas Docker.
Terdapat dua kaedah pemetaan port biasa: pemetaan port statik dan pemetaan port dinamik.
Pemetaan port statik merujuk kepada pemetaan port dalam bekas Docker ke port tertentu pada hos, contohnya, pemetaan port 80 dalam bekas ke port 8080 pada hos. Kaedah pemetaan ini boleh dikonfigurasikan apabila Docker memulakan bekas, contohnya:
$ docker run -p 8080:80 nginx
Perintah ini bermaksud memulakan bekas nginx dan memetakan port 80 bekas ke port 8080 pada hos.
Pemetaan port dinamik bermakna Docker akan memperuntukkan port hos yang tidak dihuni secara automatik dan memetakan port dalam bekas ke port hos. Kaedah ini boleh dicapai dengan menggunakan titik bertindih (:), sebagai contoh:
$ docker run -p 80 nginx
Perintah ini bermaksud untuk memulakan bekas nginx dan memetakan port kontena 80 ke atas pelabuhan hos yang tidak diduduki.
Walau bagaimanapun, kadangkala anda akan mendapati bahawa selepas menggunakan arahan di atas, hos masih tidak boleh mengakses aplikasi dalam bekas Docker. Mengapa ini?
Sebab biasa ialah sudah ada aplikasi yang menduduki port ini pada mesin hos. Docker akan menyemak sama ada port tersedia Jika ia diduduki, ia akan gagal dimulakan. Penyelesaian kepada masalah ini ialah mengubah suai konfigurasi aplikasi yang menduduki port pada hos, atau memetakan port dalam bekas Docker ke port lain yang tersedia pada hos.
Sebab lain yang mungkin ialah tembok api atau mekanisme keselamatan rangkaian lain menyekat komunikasi antara hos dan bekas Docker. Jika anda menggunakan sistem Linux, anda boleh menyemak sama ada ia disekat oleh tembok api dengan melihat peraturan iptables. Jika ia disekat, anda boleh mengubah suai peraturan iptables untuk membenarkan komunikasi antara hos dan bekas Docker.
Selain dua sebab di atas, terdapat banyak sebab lain yang mungkin menyebabkan port mendengar Docker tidak boleh diakses, seperti konfigurasi rangkaian yang salah, ralat konfigurasi Docker, dsb. Apabila menghadapi masalah sedemikian, anda perlu menganalisis keadaan dengan teliti dan menyiasat punca satu demi satu.
Ringkasnya, masalah port mendengar Docker yang tidak boleh diakses memerlukan pertimbangan dan analisis komprehensif konfigurasi pemetaan port, mekanisme keselamatan rangkaian, tembok api, dll. untuk menyelesaikan masalah dengan cepat.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah bahawa port mendengar docker tidak boleh diakses. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!