Hallo miteinander,
nachdem ich nun schon einige Tage mit dem Websocket-Problem beim Edomi-Docker-Container kämpfe, bin ich jetzt mit meinem Latein am Ende.
Hier die Hintergründe dazu:
Ich habe auf Basis des Docker-Images von pfischi ein neues Image entwickelt, siehe diesen Thread. Seitdem Edomi allerdings Websockets verwendet, funktioniert die übliche Verwendung eines Docker-Containers nicht mehr. Mit üblicher Verwendung meine ich, dass die im Container verwendeten Ports bei der Initialisierung des Containers explizit angegeben werden. Das wäre dann soetwas:
Das funktioniert aber bei Edomi nicht, da die Websocket-Verbindung nicht zustande kommt. Die aktuell einzige Lösung ist, den Aufruf so zu machen:
Das hat aber den Nachteil, dass alle Ports vom Host direkt an den Container durchgereicht werden, womit man sich dann i.d.R. mit anderen Diensten auf dem Host oder weiteren laufenden Docker-Containern in die Quere kommt. Gerade für die Synology-User ist das aber ein KO-Kriterium.
Ich habe nun bspw. schon versucht, direkt im Docker-Container einen nginx-Proxy vor Edomi zu stellen, welcher die Websocket-Verbindung handhabt, was dann beim Aufruf bspw. wie folgt aussah:
Damit werden die Ports 80 bzw. 8080 vom Host an die Ports 81 bzw. 8081 im Container weitergereicht. Im Container lauscht dann der nginx auf diese Ports und reicht diese dann seinerseits an die Ports 80 bzw. 8080 von Edomi weiter. Also an die Edomi-Default-Ports. Das Admin-UI ist damit problemlos zu erreichen, nur die Visu nicht. Der rote Kreis dreht sich endlos und im Widget der aktiven Visu's flackert diese im Sekundentakt. Die Visu steht also für einen Moment in der Liste, dann ist die Liste wieder leer. Das macht also PingPong und irgendeine Art der Kommunikation findet statt.
Als nächsten Schritt habe ich einen neuen Container basierend auf dem gleichen CentOS-Basissystem gebaut und dort drin eine simple NodeJS-Websocket-Demoapplikation installiert. Kein nginx oder dergleichen, einfach nur NodeJS und den Container dann mit Portmapping "-p 80:80 -p 8080:8080" gestartet. Auf diese Websocket-Demo lässt sich problemlos zugreifen und damit ist für meine Begriffe klar, dass das Problem nicht bei Docker liegt sondern irgendetwas mit dem Edomi-Websocket zu tun hat.
Wie können wir dem auf die Spur kommen? Alle Ideen sind willkommen!
nachdem ich nun schon einige Tage mit dem Websocket-Problem beim Edomi-Docker-Container kämpfe, bin ich jetzt mit meinem Latein am Ende.
Hier die Hintergründe dazu:
Ich habe auf Basis des Docker-Images von pfischi ein neues Image entwickelt, siehe diesen Thread. Seitdem Edomi allerdings Websockets verwendet, funktioniert die übliche Verwendung eines Docker-Containers nicht mehr. Mit üblicher Verwendung meine ich, dass die im Container verwendeten Ports bei der Initialisierung des Containers explizit angegeben werden. Das wäre dann soetwas:
Code:
docker run --name edomi -p 80:80 -p 8080:8080 -d ...
Das funktioniert aber bei Edomi nicht, da die Websocket-Verbindung nicht zustande kommt. Die aktuell einzige Lösung ist, den Aufruf so zu machen:
Code:
docker run --name edomi --net=host -d ...
Das hat aber den Nachteil, dass alle Ports vom Host direkt an den Container durchgereicht werden, womit man sich dann i.d.R. mit anderen Diensten auf dem Host oder weiteren laufenden Docker-Containern in die Quere kommt. Gerade für die Synology-User ist das aber ein KO-Kriterium.
Ich habe nun bspw. schon versucht, direkt im Docker-Container einen nginx-Proxy vor Edomi zu stellen, welcher die Websocket-Verbindung handhabt, was dann beim Aufruf bspw. wie folgt aussah:
Code:
docker run --name edomi -p 80:81 -p 8080:8081 -d ...
Damit werden die Ports 80 bzw. 8080 vom Host an die Ports 81 bzw. 8081 im Container weitergereicht. Im Container lauscht dann der nginx auf diese Ports und reicht diese dann seinerseits an die Ports 80 bzw. 8080 von Edomi weiter. Also an die Edomi-Default-Ports. Das Admin-UI ist damit problemlos zu erreichen, nur die Visu nicht. Der rote Kreis dreht sich endlos und im Widget der aktiven Visu's flackert diese im Sekundentakt. Die Visu steht also für einen Moment in der Liste, dann ist die Liste wieder leer. Das macht also PingPong und irgendeine Art der Kommunikation findet statt.
Als nächsten Schritt habe ich einen neuen Container basierend auf dem gleichen CentOS-Basissystem gebaut und dort drin eine simple NodeJS-Websocket-Demoapplikation installiert. Kein nginx oder dergleichen, einfach nur NodeJS und den Container dann mit Portmapping "-p 80:80 -p 8080:8080" gestartet. Auf diese Websocket-Demo lässt sich problemlos zugreifen und damit ist für meine Begriffe klar, dass das Problem nicht bei Docker liegt sondern irgendetwas mit dem Edomi-Websocket zu tun hat.
Wie können wir dem auf die Spur kommen? Alle Ideen sind willkommen!
Kommentar