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

Patricia Arquette
Lepaskan: 2024-11-06 13:29:03
asal
505 orang telah melayarinya

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) ...
}
Salin selepas log masuk

Fail Docker:

FROM golang:1.11.4-alpine3.8
... (Build and expose port commands) ...
Salin selepas log masuk

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) ...
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!