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

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

Patricia Arquette
Patricia ArquetteOriginal
2024-11-06 13:29:03490Durchsuche

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) ...
}

Dockerfile:

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

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) ...

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!

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