Docker auf vServer

  • Hallo zusammen,


    ich würde gerne die Dashboard Software redash mit Docker zum Laufen bringen. Ich bin völliger Anfänger, was Docker betrifft und so hängt es auch an anderer Stelle.


    Wo stehe ich gerade?

    • Habe einen vServer und dort ein Ubuntu Image mit Docker installiert. Docker läuft somit grundlegend schon mal.
    • Habe ein Docker Image von redash installiert über
      • docker create --name Redash -p 80:80 redash/redash

    Das klappt bis hier auch. Der Start allerdings scheitert dann:

    • docker start Redash
    • Gibt zurück:
      • Error response from daemon: driver failed programming external connectivity on endpoint Redash
      • Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use
        Error: failed to start containers: Redash


    Ich habe hier nur eine Ahnung, was das Problem ist (Port ist schon belegt? IP stimmt nicht?), weiß aber nicht, wie ich an dieser Stelle weiterkomme.

    Auch wäre für mich dann die Frage, die ich den Container überhaupt über den Browser aufrufen kann.
    Ein Apache läuft und hat dort auch einige VirtualHosts - wäre das dann der Ort, wo ich auch auf den Container/IP verweise?


    Lieben Dank und VG
    Dirk

  • Port 80 ist schon in Benutzung auf deinem Host System. Gib mal als root "netstat -tulpen" ein, dann kannst sehen, welcher Prozess dafür verantworlich ist. Anschließend musst du dann entscheiden: Was ist wichtiger? Prinzipiell kann man Dienste ja auch auf anderen Ports als 80 laufen lassen. Vielleicht bietet sich 443 als verschlüsselte Alternative an.

  • listen tcp4 0.0.0.0:80 / -p 80:80

    Du probierst ja dem ReDash Container zu sagen er soll auf Port 80 für Anfragen lauschen. Hier läuft aber schon dein Apache. Des Weiteren öffnest du ihn überall hin. Wegen dem 0.0.0.0:80. Mein Vorschlag ist du startest den ganzen mit

    Code
    -p 127.0.0.1:1234:80

    somit ist der Container erstmal nur vom Localhost erreichbar. Den rest machst du dann mit deinem schon laufendem Apache (Virtualhost der ein Proxy auf 1234 darstellt)

  • Hallo Ihr Beiden,


    danke für Eure Hilfestellung. Ich bin nun einen Schritt weiter, aber wohl noch nicht am Ziel.


    Docker Container läuft nun:

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

    aaaaaaaaa redash/redash "/app/bin/docker-ent…" 2 minutes ago Up 2 minutes 5000/tcp, 127.0.0.1:1234->80/tcp Redash


    Proxy ist so eingestellt:

    VirtualHost *:80>

     ServerAdmin admin@example.com 

     ServerName meineadresse.de 

     ServerAlias docker.meineadresse.de 

     <Proxy *>

        Allow from localhost 

     </Proxy> 

     RewriteEngine on 

     RewriteCond %{HTTP:Upgrade} =websocket 

     RewriteRule /(.*) ws://localhost:1234/$1 [P,L] 

     RewriteCond %{HTTP:Upgrade} !=websocket 

     RewriteRule /(.*) http://localhost:1234/$1 [P,L] 

     ProxyPass / http://localhost:1234/ 

     ProxyPassReverse / http://localhost:1234/ 

     ProxyRequests Off 

    </VirtualHost>


    Wenn ich dann allerdings so die URL docker.meineadresse.de aufrufen, erhalte ich:

    Proxy Error

    The proxy server received an invalid response from an upstream server.

    The proxy server could not handle the request Reason: Error reading from remote server



    Wenn ich alternativ einmal den anderen Port 5000 nutze, der dort beim Container steht, dann erhalte ich:

    Service Unavailable The server is temporarily unable to service your request due to maintenance downtime or capacity problems.Please try again later.


    Das sieht ja fast vielversprechender aus, auch wenn ich nicht weiß, was rum Ding in maintenance seht :)

  • Das sieht ja fast vielversprechender aus, auch wenn ich nicht weiß, was rum Ding in maintenance seht :)

    Ist denn sichergestellt, dass die Konfiguration der Container-Instanz vollständig ist (aus den obigen Angaben nicht ersichtlich)? Da gibt es ja einige Umgebungsvariablen und Abhängigkeiten:

    Note that Redash depends on Redis & PostgreSQL to run, which are not included in the image.

    VServer IOPS Comparison Sheet: https://docs.google.com/spreadsheets/d/1w38zM0Bwbd4VdDCQoi1buo2I-zpwg8e0wVzFGSPh3iE/edit?usp=sharing

  • Also "curl 127.0.0.1:1234" gibt folgendes zurück:

    • curl: (52) Empty reply from server


    Zu: Redis & PostgreSQL

    • Guter Punkt, bisher ist das nicht sichergestellt. Habe ich glatt überlesen, wobei auf der Seite wirklich nicht so viel steht :sleeping:
    • Könnte das denn die Fehlermeldung erzeugen oder sieht das eher danach aus, dass die Seite generell nicht aufrufbar ist?!?!


    Und ich dachte, dass bei Docker gerade der Clou ist, dass alles im Image / Container drin ist, was das Ding zum Laufen braucht.
    Da muss ich nun erst mal wieder mich einlesen, wie man den die DB in das alles reinbekommt..... :D

  • Und ich dachte, dass bei Docker gerade der Clou ist, dass alles im Image / Container drin ist, was das Ding zum Laufen braucht.

    Das hängt natürlich vom Image ab. Meine Erfahrung ist: meistens verursacht Docker mehr Probleme als es löst.

    Meine Minecraft-Plugins auf SpigotMC (Open Source): www.spigotmc.org/members/mfnalex.175238/#resources

    Discord: discord.jeff-media.com

    Einmal editiert, zuletzt von mfnalex ()

  • Vorab: Du wirst eine längere Lernphase für und mit Docker haben. Dann ists die Sache aber imho auf jeden Fall wert.


    Imho wäre eine andere Herangehensweise empfehlenswert:

    • Server mit Basisimage (ohne irgendwas drauf) installieren, nicht mal ein Webserver sollte drauf sein

    NPM ist ein feines Paket, das alle möglichen Proxyaufgaben in einer GUI anbietet und als einziger Container auf dem Host Port 80 und 443 laufen sollte. Alle anderen Container lässt Du INTERN (nicht nach aussen gelegt) auf irgendwelchen anderen Ports laufen (z.B. :1234 , :3134 , :1265). Du packst die anderen Container in ein Netzwerk zusammen mit dem NPM (damit die interne Namensauflösung klappt) und richtest Proxyweiterleitungen mit einem eigenen DNS Namen ein (z.B. redash.domain.tld), die dann SSL abgesichert laufen sollen und auf den Container "redash" (z.B.) auf Port :1234 weiterleitet. Dann zieht sich NPM ein Let's Encrypt Zertifikat und bietet Dir unter https://redash.domain.tld die Anwendung an, die im Container redash auf Port 1234 läuft.


    Portainer ist eine feine, grafische Verwaltungsoberfläche, ersetzt jedoch nicht, sich generell mit Docker auszukennen.


    Ein Container, der für mich noch zu meinem Basisstack gehört, ist https://github.com/containrrr/watchtower , ein Container, der andere Container automatisch aktuell hält und https://hub.docker.com/r/poma/docker-telegram-notifier , ein Container, der bei Änderungen (z.B. Autoupdates, Crashes von Containern o.ä.) dies per Telegram Bot mitteilt.

    RS Ostern L OST22 (~RS "3000" G9.5) (8C,24GB,960GB) | RS Cyber Quack (1C,2GB,40GB)