Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Saya Tidak Boleh Menyambung ke Pelayan WebSocket Saya Di Dalam Bekas Docker dari Luar?

Mengapa Saya Tidak Boleh Menyambung ke Pelayan WebSocket Saya Di Dalam Bekas Docker dari Luar?

Patricia Arquette
Patricia Arquetteasal
2024-11-06 13:29:03490semak imbas

Why Can't I Connect to My WebSocket Server Inside a Docker Container from Outside?

Menyelesaikan masalah Dockerization Pelayan WebSocket

Isu:

Kesukaran menyambung ke pelayan WebSocket yang dijalankan dalam bekas Docker apabila mengaksesnya dari luar bekas.

Kod Pelayan:

// server.go
func RootHandler(w http.ResponseWriter, r *http.Request) {
    ... (WebSocket handling code) ...
}

Fail Docker:

FROM golang:1.11.4-alpine3.8
... (Build and expose port commands) ...

Gelagat Jangkaan:

Menyambung ke pelayan WebSocket dari luar bekas harus mencetak "disambungkan" pada sisi klien.

Ralat Sebenar:

Pelanggan panik dengan ralat: "panik: baca tcp [::1]:60328->[::1]:8000: baca: set semula sambungan oleh rakan sebaya."

Punca:

Pelayan sedang mendengar pada localhost (127.0.0.1) dalam bekas, yang tidak boleh diakses dari luar bekas.

Penyelesaian:

Untuk menyelesaikan isu ini, tukar alamat dengar pelayan dalam pelayan. pergi ke ":8000" dan bukannya "localhost:8000." Dengan cara ini, pelayan akan mendengar pada semua alamat IP bekas.

// server.go
func RootHandler(w http.ResponseWriter, r *http.Request) {
    ... (WebSocket handling code) ...
}

// main()
server := http.Server{Addr: ":8000"}
... (Rest of server setup) ...

Maklumat Tambahan:

  • Docker mendedahkan port dengan mencipta peraturan iptables kepada majukan trafik ke alamat IP bekas.
  • Bekas docker biasanya mendapat alamat IP dalam antara muka rangkaian docker0.
  • Apabila menyambung dari luar bekas, trafik dimajukan ke alamat IP bekas, yang mungkin tidak sepadan dengan alamat dengar pelayan.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menyambung ke Pelayan WebSocket Saya Di Dalam Bekas Docker dari Luar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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