Port docker tidak boleh diping

WBOY
Lepaskan: 2023-05-13 13:12:37
asal
1306 orang telah melayarinya

Apabila menggunakan Docker, kadangkala kita akan mendapati port kontena Docker tidak boleh berkomunikasi dengan hos. Ini mungkin disebabkan oleh beberapa sebab, seperti isu konfigurasi rangkaian, isu tetapan keselamatan, isu firewall dan banyak lagi. Dalam artikel ini, kami akan meneroka bagaimana untuk menyelesaikan masalah pelabuhan Docker tidak dapat melakukan ping dan bagaimana untuk mengelakkan perkara ini daripada berlaku.

Fahami konfigurasi rangkaian Docker

Sebelum kita mendalami penyelesaian masalah, kita perlu memahami konfigurasi rangkaian Docker. Docker mempunyai tiga mod konfigurasi rangkaian asas: jambatan, hos dan tiada. Secara lalai, Docker menggunakan mod jambatan untuk menetapkan alamat IP kepada bekas dan menyambungkan bekas ke subnet maya. Ini bermakna alamat IP bekas adalah berbeza daripada alamat IP hos.

Apabila menggunakan bekas Docker untuk komunikasi rangkaian, Terjemahan Alamat Rangkaian (NAT) diperlukan antara hos dan bekas. Ini sebenarnya merupakan langkah keselamatan yang baik kerana ia melindungi hos daripada serangan yang datang dari bekas.

Walau bagaimanapun, ini juga bermakna port dalam kontena tidak boleh berkomunikasi secara langsung dengan hos. Ini kerana port dalam bekas biasanya ditetapkan dalam subnet kontena dan pada hos, kami tidak melihat subnet ini, jadi kami tidak mempunyai akses terus ke port kontena.

Menyelesaikan masalah port Docker tidak dapat melakukan ping

Sekarang kita memahami asas konfigurasi rangkaian Docker, kita boleh mula menyelesaikan masalah port Docker tidak dapat ping.

Pertama, kita perlu menyemak alamat IP bekas Docker. Kita boleh menyenaraikan bekas yang sedang berjalan menggunakan arahan berikut:

docker ps
Salin selepas log masuk

Selepas menyenaraikan bekas, kita boleh mendapatkan alamat IP bekas menggunakan arahan berikut:

docker inspect <container_id>
Salin selepas log masuk

Pastikan untuk menggantikan container_id dengan ID bekas anda sendiri.

Seterusnya, kita perlu menyemak sama ada bekas Docker menjalankan perkhidmatan yang diperlukan. Kita boleh menggunakan arahan berikut untuk mengesahkan sama ada bekas menjalankan perkhidmatan:

docker logs <container_id>
Salin selepas log masuk

Jika kita melihat mesej yang serupa dengan "mendengar di <port>" dalam log, ini bermakna bekas itu menjalankan perkhidmatan yang sepadan.

Seterusnya, kita perlu melihat sama ada tembok api menyekat komunikasi antara hos dan bekas. Jika kami menjalankan beberapa pengedaran Linux biasa, seperti Ubuntu atau CentOS, maka firewall tersebut akan didayakan secara lalai. Untuk membenarkan komunikasi antara hos dan bekas, kita perlu membuka port untuk bekas Docker.

Berikut ialah contoh membuka port, menggunakan Ubuntu sebagai contoh:

sudo ufw allow <port>/tcp
Salin selepas log masuk

Sila pastikan untuk menggantikan <port> dengan port yang ingin anda buka.

Akhir sekali, kita perlu menyemak sama ada port kontena Docker dipetakan ke mesin hos. Dalam Docker, kita boleh menggunakan "port mapping" untuk memetakan port kontena ke port hos. Sebagai contoh, kita boleh memetakan port 80 dalam bekas ke port 8080 pada hos. Dengan cara ini, apabila kami mengakses hos melalui http://localhost:8080, port 80 bekas Docker akan diakses.

Berikut ialah contoh menggunakan pilihan -p untuk pemetaan port dalam Docker:

docker run -p 8080:80 <image_name>
Salin selepas log masuk

Pastikan untuk menggantikan <image_name> dengan nama imej anda sendiri.

Mencegah masalah port Docker tidak boleh ping

Selain menyelesaikan masalah port Docker yang tidak stabil yang tidak boleh ping, terdapat langkah pencegahan lain yang boleh diambil untuk memastikan bahawa Bekas Docker boleh mengendalikan komunikasi darat seperti biasa.

Pertama, kita boleh menentukan port dalam fail Docker Compose. Ini boleh mengurangkan operasi manual dengan berkesan dan memendekkan masa daripada pembangunan kepada penggunaan persekitaran pengeluaran. Berikut ialah contoh menentukan port dalam fail Docker Compose:

services:
    web:
        build: .
        ports:
            - "8080:80"
Salin selepas log masuk

Kedua, kita boleh menggunakan mod rangkaian jambatan Docker untuk memastikan semua bekas berada pada rangkaian yang sama. Ini akan membolehkan bekas untuk berkomunikasi antara satu sama lain dan hos untuk berkomunikasi dengan bekas. Berikut ialah contoh menggunakan mod jambatan:

docker run --network=bridge <image_name>
Salin selepas log masuk

Akhir sekali, kita boleh menentukan port yang perlu didedahkan dalam Dockerfile. Ini akan memastikan bahawa bekas Docker boleh membuka port yang betul secara automatik. Berikut ialah contoh untuk menentukan port yang perlu didedahkan dalam Dockerfile:

EXPOSE 80
Salin selepas log masuk

Kesimpulan

Apabila menggunakan Docker, adalah perkara biasa untuk menghadapi masalah bahawa port tidak boleh ping . Walau bagaimanapun, selagi kami menguasai konfigurasi rangkaian Docker dan mengambil beberapa langkah pencegahan, kami boleh mengelakkan situasi ini daripada berlaku dan menyelesaikan masalah dalam masa. Saya harap artikel ini dapat membantu anda apabila anda menghadapi masalah bahawa port tidak boleh diping semasa menggunakan Docker.

Atas ialah kandungan terperinci Port docker tidak boleh diping. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan