Ankündigung

Einklappen
Keine Ankündigung bisher.

Edomi im Docker-Container - revised

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Zitat von beauty Beitrag anzeigen
    starwarsfan ich hätte da ein anderes Problem, vielleicht kannst du ja helfen..... hab deine Docker Version auf der Synology am laufen funktioniert auch soweit, bis auf das ich von mobilen Geräten (iphone,ipad) nicht mehr auf die Visu komme. Gebe ich die selbe Adresszeile am Läppi ein geht alles ohne Probs. Auf der Adminseite von Edomi ist aber zusehen das sich für 1-2 Sek. das mobile Gerät verbinden will aber dann irgendwie abgebrochen wird. Es gibt keine Fehlermeldung oder so, am ipad dreht sich nur der rote kreis ums Edomi Logo. auf der Syno VM mit dem gleichen Projekt läuft alles ganz normal.
    Muß hier noch mal auf mein Edomi-Docker Problem zurück kommen, da ich bisher keine Lösung finden konnte.
    Weiss jemand ob es vielleicht sein kann das sich der VMM und Docker auf der Syno sich in die Quere kommen wenn auf beiden Systemen Edomi installiert ist aber jeweils nur 1 Instanz läuft? Können die Ports reserviert sein auch wenn z.b. die Edomi-VM ausgeschaltet ist?
    Kann hierzu jemand was sagen bevor ich hier rumexperimentiere?

    Kommentar


      Um Edomi mal anzutesten (schon lange auf meiner Agenda), ist dieses Image ja super. Danke starwarsfan !
      Jetzt bin ich mal dazu gekommen. Ich habe nur die Basiskonfig gemacht und ein Projekt angelegt. Als nächstes wollte ich den Restart (Erhaltung der angelegten Daten) testen. Leider schaffe ich es noch nicht den Container neu zu starten ohne dass ich a.) die bereits angelegten Daten verliere oder b.) mir die DB zerschiesse.

      Ich starte den Container folgend:
      Code:
      #!/bin/bash
      docker run --name edomi --restart=on-failure \
              -v /home/nuc5i7/containers/edomi/mysql:/var/lib/mysql \
              -p 47080:80 -p 48080:8080 \
              -p 3671:3671/udp -p 50000:50000/udp -p 50001:50001/udp -p 22222:22 \
              -e KNXGATEWAY=192.168.137.107 -e KNXACTIVE=true -e HOSTIP=192.168.137.48 \
              -d starwarsfan/edomi-docker:latest
      und beende und entferne ihn mit (wohl falsch???):
      Code:
      #!/bin/bash
      docker stop edomi
      docker container rm edomi
      Nach einem erneuten "docker run" bekomme ich Fehler bzgl. der DB:
      Code:
      2018-09-06 19:21:09    032696    MAIN    562    Datenbank: edomiAdmin.project (automatische Reparatur aktiviert - siehe System-Log): 1 client is using or hasn't closed the table properly    ERROR
      2018-09-06 19:21:09    034323    MAIN    562    Datenbank: edomiAdmin.user (automatische Reparatur aktiviert - siehe System-Log): 1 client is using or hasn't closed the table properly    ERROR
      2018-09-06 19:21:09    625088    MAIN    562    Datenbank: edomiLive.RAMknxRead (automatische Reparatur aktiviert - siehe System-Log): 1 client is using or hasn't closed the table properly    ERROR
      2018-09-06 19:21:09    645234    MAIN    562    Datenbank: edomiLive.RAMko (automatische Reparatur aktiviert - siehe System-Log): 1 client is using or hasn't closed the table properly    ERROR
      Und die KNX Anbindung geht dann wohl nicht mehr (keine Einträge im Monitor.log)

      Wenn ichs mit "docker stop" und "docker start" mache, sieht das Ergebnis nicht besser aus.

      Wie startet man den Container richtig?
      Zuletzt geändert von trant; 06.09.2018, 18:41.
      lg
      Stefan

      Kommentar


        Hast du dein Live-Projekt aktiviert gehabt? Wenn du nur ein Arbeitsprojekt anlegst dann klappt das nicht und muss erst unter Live-Project aktiviert werden.
        Ich kenn mich zwar nicht mit dem Konsolenstart von Edomi aus da auf der Synology automatisch über das UI gestartet wird, aber ich bezweifle mal stark das der Befehl "docker container rm edomi" richtig ist. Hiermit löscht du ja den Container und somit auch dein angelegtes Projekt.

        Kommentar


          Zitat von Eraser Beitrag anzeigen

          Was wurde da jetzt genau gemacht zwecks dem Port-Problem auf der KNX-Seite? Mittels macvlan?
          Hallo Wolfgang,

          sorry, habe Deinen post ganz übersehen... Ja, ich habe mittels macvlan nun eine separate Netzwerkschnittstelle für den EDOMI Container erstellt, damit ist dann der container mit einer eigenen IP in meinem Heimnetz erreichbar und man ist dann unabhängig von den ports des docker hosts und kann alle nötigen ports einfach 1:1 mappen.

          eine sehr detaillierte Anleitung habe ich im Timberwolf Forum veröffentlicht.

          Gruß
          Andi
          Gruß
          Andi

          Kommentar


            Aktiviert hab ich es.
            Glaub auch dass das rm nicht korrekt ist, aber mit nur stop start gehts auch nicht.

            Obwohl ich alle meine anderen verwendeten Container auch beim stoppen entferne, jedefalls die die ich noch nicht auf docker-compose umgestellt habe.

            Edit: Kommando zurück, läuft (auch mit meinem remove). Ich muss nur nach jedem Neustart das Projekt erneut aktivieren.
            Zuletzt geändert von trant; 07.09.2018, 06:40.
            lg
            Stefan

            Kommentar


              Nächstes Problem, habe nun versucht eine Visu zu erstellen. Beim Aufruf dieser, komme ich zwar über den Login drüber, aber es wird mit nichts angezeigt.
              Grund dafür ist, dass Edomi ja standardmässig den WS Port 8080 konfiguriert hat und ich diesen, wie oben ersichtlich auf 48080 auf meinem Host mappe. 8080 kann ich nicht verwenden, da ich da schon was anderes drauf habe.
              Ist der WS Port über eine Variable im Docker setzbar?

              Edit: muss wir dann das Image wohl selbst bauen
              Zuletzt geändert von trant; 07.09.2018, 10:46.
              lg
              Stefan

              Kommentar


                Du kannst den Port in Deiner Edomi-Basis-Konfiguration anpassen. "Websocket: TCP-Port".

                Kommentar


                  Es ist ja dadurch trotzdem kein "Exposed Port", gehts trotzdem?
                  Hab mir das Image nun schon neu gebaut
                  lg
                  Stefan

                  Kommentar


                    Die Funktion ist genau dafür gedacht von Außen auf einen anders gemapten Port zuzugreifen.

                    Kommentar


                      Das schon aber wenn ich in der Basiskonfig von 8080 auf 48080 ändere, und im run ein 48080:48080 mache, funktiert es trotzdem nicht. Dachte Das es liegt daran, dass das Port 48080 im Image ja nicht exposed wird. Das hab ich nun erweiter und nun läufts.

                      Edit: hab die Doku nochmal bemüht, sollte ohne mein EXPOSE auch laufen, muss ich nochmal checken. Nichtsdestotrotz müsste ich so zuerst immer manuell die Edomi Basiskonfig anpassen. Jetzt baue ich halt aufs starwarsfan Image auf.
                      Zuletzt geändert von trant; 07.09.2018, 11:49.
                      lg
                      Stefan

                      Kommentar


                        Hallo miteinander,

                        die Idee ist eigentlich, dass die beim Docker-Run übergebenen Parameter in die Edomi-Konfig eingetragen werden und des im Nachgang keine Anpassungen mehr an der Basis-Konfig braucht. In der aktuellen Implementierung ist jedoch noch gar nicht vorgesehen, dass die Ports im Container anders sein können. Sprich, bisher hat es ausgereicht, die Ports von aussen auf 80 bzw. 8080 zu mappen.

                        Wie auch immer, ich werde das gern implementieren. Da ich im Moment allerdings ziemlich unter Wasser bin, warte ich noch auf den Feature-Request, dass die User-LBS in einem Subfolder untergebracht werden können, um dann mehrere Sachen auf einen Rutsch zu erledigen.
                        Kind regards,
                        Yves

                        Kommentar


                          Ich hab das ganze (plus noch irgend etwas anderes das ich vergessen habe) bereits bei mir lokal liegen. Mangels besserer Idee habe ich eine weitere Umgebungsvariable für den Websocket-Port eingeführt. Man muss dann leider den Port zwei mal im Docker Kommando deklarieren (ein mal fürs expose, ein mal in der Umgebungsvariable).
                          Ich schicke dir hoffentlich noch am WE nen Merge / Pull Request.

                          Wie Yves beschrieben hat muss der Websocket Port in der ini mit dem, der exposed wird übereinstimmen.
                          Also trant, Lösung auf die Schnelle: Vorher überlegen welchen Port du als Websocket Port nimmst. Im Docker Kommando diesen Port 1:1 exposen, also bspw 7080:7080. Nach dem Start von Edomi in der "Basiskonfiguration" das Setting für den Websocket entsprechend anpassen. Danach sollte die Visu laufen.
                          Das mit dem "nach jedem Neustart das Projekt erneut aktivieren" ist aber auch nicht ganz normal, da fällt mir aber spontan auch nix zu ein.

                          Kommentar



                            Danke, es läuft bei mir, hab mir trotzdem ein eigenes Image gebaut, das die ini Datei manipuliert.
                            Ja, das mitn aktivieren ist mir eigentlich egal, wenn ich mal neu starte, dann aktivier ich halt.
                            Ich bin ja im Moment nur mal am testen, ob Edomi was für mich ist. Es ist sehr mächtig und die Ruleengune und die LBS gefallen. Leider bin ich nix der GUI-Designer, und die GUI Bastelei schreckt mich noch.
                            Aktuell bin ich auf openHAB mit hunderten Items und ebensovielen Rules, da wird eine Migration auch spannend.
                            lg
                            Stefan

                            Kommentar


                              Guten Abend,

                              wenn der Docker container mit "docker stop edomi" beendet wird, reagiert das image leider nicht wirklich darauf mit der Folge, dass die MySQL Datenbank nicht richtig geschlossen wird.
                              Ich habe daher die /root/start.sh etwas modifiziert um einen sauberen shutdown zu ermöglichen. Der Code wird zwischen dem Aufruf der start.sh und dem wait eingefügt, wobei beide Zeilen etwas modifiziert werden:
                              Code:
                              /usr/local/edomi/main/start.sh &
                              
                              edomiPID=$!
                              
                              # Edomi start script is ended either by call of 'reboot' or 'shutdown'.
                              # These two files are replaced by helper scripts and their output is
                              # evaluated during the next steps.
                              
                              docker_exit()
                              {
                                  echo "SIGINT or SIGTERM"
                                  php /usr/local/edomi/main/control.php shutdown
                              
                                  echo "wait for edomi shutdown..."
                                  wait $edomiPID
                              
                                  echo "shutdown now..."
                                  trap - SIGINT SIGTERM
                                  exit 0
                              }
                              
                              trap docker_exit SIGINT SIGTERM
                              
                              # But at first wait until Edomi background script is exited.
                              wait $edomiPID
                              # wait
                              # ab hier dann wieder original
                              Vielleicht kann das mit in das Image aufgenommen werden?

                              Gruß,
                              Thomas

                              Kommentar


                                Guten Abend noch mal,

                                offenbar werden auch die services nicht sauber beendet, daher gleich noch eine weitere Ergänzung, jetzt gleich als patch File:
                                Code:
                                --- start.sh    2018-10-30 21:51:13.000000000 +0100
                                +++ start.sh.modified    2018-10-30 21:35:57.000000000 +0100
                                @@ -50,14 +50,44 @@
                                 service httpd start
                                 service ntpd start
                                 service sshd start
                                +
                                 /usr/local/edomi/main/start.sh &
                                 
                                +edomiPID=$!
                                +
                                 # Edomi start script is ended either by call of 'reboot' or 'shutdown'.
                                 # These two files are replaced by helper scripts and their output is
                                 # evaluated during the next steps.
                                -#
                                +
                                +stop_services()
                                +{
                                +    service sshd stop
                                +    service ntpd stop
                                +    service httpd stop
                                +    service vsftpd stop
                                +    service mysqld stop
                                +}
                                +
                                +
                                +docker_exit()
                                +{
                                +    echo "SIGINT or SIGTERM"
                                +    php /usr/local/edomi/main/control.php quit
                                +    echo "wait for edomi shutdown..."
                                +    wait $edomiPID
                                +    stop_services
                                +    
                                +    echo "shutdown now..."
                                +    
                                +    trap - SIGINT SIGTERM
                                +    exit 0
                                +}
                                +
                                +
                                +trap docker_exit SIGINT SIGTERM
                                +
                                 # But at first wait until Edomi background script is exited.
                                -wait
                                +wait $edomiPID
                                 
                                 # Handle if Edomi restore process is running, which will be sent to background
                                 # by Edomi main script. So at this point the Edomi start script is finished but
                                @@ -80,8 +110,12 @@
                                     rm -f /tmp/do*
                                     # Trigger container restart by simulating an internal error
                                     # Container must be startet with opeion "--restart=on-failure"
                                +
                                +    stop_services
                                +
                                     echo "Exiting container with return value 1 to trigger Docker restart"
                                     exit 1
                                +
                                 elif [ -e /tmp/doShutdown ] ; then
                                     # Edomi called 'shutdown'
                                     rm -f /tmp/do*
                                @@ -89,5 +123,8 @@
                                 
                                 # Exit container with 0, so Docker will not restart it
                                 # Container must be startet with opeion "--restart=on-failure"
                                +
                                +stop_services
                                +
                                 echo "Exiting container with return value 0 to prevent Docker restarting it"
                                 exit 0
                                Gruß, Thomas

                                Kommentar

                                Lädt...
                                X