Container nach hochfahren der NAS automatisch neustarten?

  • Hallo,

    ich nutze in Container Station einen Nextcloudpi Container.

    Da ich jeden Tag meine NAS um 23Uhr herunterfahre und um 8Uhr starten lasse, muss ich leider immer wieder manuell den nextcloudpi Container neustarten, da sonst HTML Error 500 beim Aufrufen kommt.

    Och denke der Container wird beim Herunterfahren nicht richtig beendet oder später nicht richtig gestartet.

    Nach einem manuellen Neustart des Containers funktioniert dann wieder alles normal.


    Wisst ihr ob es eine Möglichkeit gibt einzustellen, dass zum Beispiel um 8:30Uhr der Container automatisch neugestartet wird?

    Das würde mir sehr viel helfen :)

  • Hi,


    wenn du ein docker-compose File nutzt dann kannst du das mit "restart: always" einstellen. (In Qnap erzeugt man das mit dem "Create Application" unter der Einstellung "Create".
    Welche Einstellungen beim Restart genau funktionieren kannst du hier sehen: https://docs.docker.com/compose/compose-file/#restart


    Ansonsten kannst du dir noch ein Skript bauen, was immer um 8:30 Uhr ausgeführt wird und den Container dann automatisch neustartet. Dafür müsstest du allerdings direkt auf docker auf dem Betriebssystem zugreifen. Der docker service liegt irgendwo bei "/share/CACHEDEV1_DATA/.qpkg/container-station/bin/" (Wenn du default installiert hast).


    Da kannst du dir auch alle laufenden Container anschauen oder die entsprechend neustarten. Beispiel für so ein Skript könnte also sein:


    Code
    /share/CACHEDEV1_DATA/.qpkg/container-station/bin/docker stop {containername}
    /share/CACHEDEV1_DATA/.qpkg/container-station/bin/docker start {containername}

    oder auch direkt über den restart

    Code
    /share/CACHEDEV1_DATA/.qpkg/container-station/bin/docker restart {containername}


    Falls dein Server Probleme hat weil du andere Abhängigkeiten hast kannst du die auch im docker-compose einstellen. Dann fährt der zweite Container erst hoch nachdem der erste gestartet ist.

  • Hmm ok hab mir das etwas angeschaut aber bin erstmal etwas überfordert...


    Hab ein Docker Compose angelegt, dass mir in Container-Station als App angezeigt wird, aber ich weiß nicht wie ich den restart auf den bestimmten container zuweise.


    Mit WinSCP bin ich dann direkt auf mein NAS und in den Ordner

    "/share/CACHEDEV1_DATA/.qpkg/container-station/bin/"

    Wenn ich da einen Befehl ausführe, sagt er mir aber: docker: command not found

    Obwohl die Docker Datei in dem Verzeichnis ist (wird mir mit ls angezeigt) :(

  • Versuch es mal mit "./docker" statt "docker" als command. Das sagt der Commandline, dass sich die Datei im selben Verzeichnis befindet.


    Ich hänge dir einfach mal eins meiner Compose files hier an als Beispiel

    Das würde einen Container hochfahren der mysql enthält (image: mysql:latest) und den immer wieder automatisch hochfahren. So kann man auch mehrere Container zusammen als Verbund starten.

  • Warum setzt du in der CS nicht einfach den Hacken, mein Unifi Controller startet immer mit, völlig automatisch.

    Ohne Skript und Co.

  • Das würde dann aber ja nicht zu einer ganz bestimmten Uhrzeit (8:30 Uhr) neustarten sondern automatisch beim Start der CS.

    So wie es sich anhört fährt der Container ja automatisch hoch, macht nur irgendwas dabei falsch.

  • Ich habe leider das selbe Problem mit dem nextcloudpi Container.

    Wenn mein NAS neustartet und den Container startet, meldet er im LOG:

    Code
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111 "Connection refused")

    Sobald ich ihn von Hand stoppe und neustarte, wird kein Fehler mehr gemeldet und er läuft problemlos.

    Hat jemand eine Idee wie man das beheben kann?

  • Qnap007 verwendest du eine auf dem Host laufende MySQL Datenbank? Diese wird scheinbar erst später im Bootprozess gestartet. Ich sehe mehrere Optionen:
    1. versuchen den Containerstart zu verzögern (z.B. durch ein eigenes Startskript mit einem sleep Befehl)

    2. schauen ob man die Startreihenfolge so abändern kann, dass immer zuerst mysql und danach erst die Container Station initiiert wird

    3. statt der Host Datenbank einen Datenbank Container benutzen. Mit Hilfe von docker-compose könnte so sichergestellt werden, dass immer erst der Nextcloud Container gestartet wird, wenn der Datenbank Container läuft (ggf. kann man das mit Docker Compose auch für die Hostdatenbank machen, aber da hab ich keine Ahnung wie...)


    Meiner Meinung nach ist Option 3 die beste Variante, weil du zusätzlich bessere Kontrolle über die Versionen der Datenbank hast.

  • Ich habe auf meiner TS-251+ keine zusätzlichen DB installiert. Ich gehe davon aus, dass die MySQL standardmäßig auf dem NAS läuft.


    Ich würde ungern noch einen Container zusätzlich einrichten.

    Gibt es denn die Möglichkeit die Startreihenfolge der NAS Dienste zu ändern?

  • Ich würde ungern noch einen Container zusätzlich einrichten.

    Darf ich fragen warum? Rein technisch gesehen macht es so gut wie keinen Unterschied ob die Datenbank auf dem NAS läuft oder in einem Container.


    Gibt es denn die Möglichkeit die Startreihenfolge der NAS Dienste zu ändern?

    Möglicherweise, wenn du die QNAP eigenen Startskripte durchsuchst. Ich würde allerdings davon abraten daran etwas zu ändern, weil das

    a) zu unvorhersehbaren Verhalten führen kann und
    b) vermutlich kein Update übersteht und du demnach die Änderungen jedesmal neu durchführen musst.


    Je nachdem wie stark deine Nextcloud Instanz verwendet werden soll, könntest du auch auf eine "richtige" Datenbank verzichten und die SQLite Variante nehmen. Davon wird allerdings in der offiziellen Nextcloud Doku abgeraten. Ich persönlich fahre damit aber auf meiner Ein-Benutzer Instanz mit wenig zu synchronisierenden Daten (~600MB) ganz gut (wenn auch auf einem Laptop und nicht auf meiner TS 251+).

  • Darf ich fragen warum?

    Weil das bedeuten würde, dass ich dem nextcloupi Container beibringen müsste diesen DB Container zu verwenden. Und dafür kenne ich mich noch zu wenig damit aus. Zusätzlich müsste ich mich um die Updates dieses Containers/DB kümmern, was aktuell das Host System erledigen würde.


    Also fällt die 2. Variante auch aus.

  • Hallo zusammen,


    Ich habe genau das gleiche Problem wie oben beschrieben.

    Ich würde dieses nun gerne möglichst einfach lösen, da ich aber sehr unerfahren mit Docker bin, weiss ich noch nicht genau wie ich das angehen soll.

    Für mich sieht die in Post #2 vorgeschlagene Lösung ziemlich einfach (und verständlich) aus. Sehe ich das richtig, dass danach der Docker (restart always) einfach immer neu startet, bis er fehlerfrei läuft? Mir ist noch nicht ganz verständlich wo und wie ich diese Einstellung vornehmen kann.

    Oder empfiehlt mir jemand eine andere Lösung und könnte mir eine Schritt für Schritt Anleitung dazu geben?

    Danke vielmals.

  • Zusätzlich müsste ich mich um die Updates dieses Containers/DB kümmern, was aktuell das Host System erledigen würde.

    Wenn Qnap mit den Aktualisierungen hinterher wäre, dann wäre an dieser Aussage was dran. Ersteres ist aber nicht der Fall...
    Die Lösung für "Zusätzlich kümmern" ist ein Tool namens Docker Compose. Damit kannst du ganz einfach Anhängigkeiten zwischen verschiedenen Containern definieren. Ein Beispiel für Nextcloud könnte dann wie folgt aussehen:


    Das wäre die Konfiguration für Nextcloud mit Redis und (hier auskommentiert) einer mysql Datenbank. Um alle erforderlichen Container zu updaten (also nextcloud, MySQL und Redis) reicht ein einfaches docker-compose down um die Dienste zu stoppen, gefolgt von docker-compose pull um die Sachen zu aktualisieren. Die so erstellten Compose Container werden sogar in der Container Station als "App" angezeigt und lassen sich darüber verwalten.