Warum kann ich von außen keine Verbindung zu meinem WebSocket-Server in einem Docker-Container herstellen?

Patricia Arquette
Freigeben: 2024-11-06 13:29:03
Original
505 Leute haben es durchsucht

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

Fehlerbehebung bei der Dockerisierung eines WebSocket-Servers

Problem:

Schwierigkeit beim Herstellen einer Verbindung zu einem WebSocket-Server, der in einem Docker-Container ausgeführt wird, wenn Zugriff darauf von außerhalb des Containers.

Server Code:

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

Dockerfile:

FROM golang:1.11.4-alpine3.8
... (Build and expose port commands) ...
Nach dem Login kopieren

Erwartetes Verhalten:

Verbindung zum WebSocket herstellen Ein Server von außerhalb des Containers sollte auf dem Client „verbunden“ ausgeben Seite.

Tatsächlicher Fehler:

Der Client gerät in Panik mit dem Fehler: „Panic: read tcp [::1]:60328->[::1] :8000: lesen: Verbindung zurückgesetzt von peer."

Ursache:

Der Server lauscht auf localhost (127.0.0.1) innerhalb des Containers, auf den von außerhalb des Containers nicht zugegriffen werden kann.

Lösung:

Um dieses Problem zu beheben, ändern Sie die Abhöradresse des Servers in server.go zu „:8000“ anstelle von „localhost:8000“. Auf diese Weise überwacht der Server alle IP-Adressen des Containers.

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

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

Zusätzliche Informationen:

  • Docker macht Ports verfügbar, indem es iptables-Regeln erstellt Leiten Sie den Datenverkehr an die IP-Adresse des Containers weiter.
  • Docker-Container erhalten normalerweise IP-Adressen innerhalb des Docker0-Netzwerks Schnittstelle.
  • Bei der Verbindung von außerhalb des Containers wird der Datenverkehr an die IP-Adresse des Containers weitergeleitet, die möglicherweise nicht mit der Abhöradresse des Servers übereinstimmt.

Das obige ist der detaillierte Inhalt vonWarum kann ich von außen keine Verbindung zu meinem WebSocket-Server in einem Docker-Container herstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!