Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. docker, Multihost auf MacOS

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    docker, Multihost auf MacOS

    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      higginsd last edited by

      Hallo Zusammen!

      Ich musste eine Weile probieren, bis ich einen Slave ioBroker-Container unter Docker auf meinem MacStudio als Docker-Host in mein ioBroker Setup einbinden konnte. Daher habe ich hier ein paar Anmerkungen aufgeschrieben, falls das noch einmal jemand versucht.

      Zunächst einmal ist wichtig, daß man den Slave im Container NICHT mittels "iobroker multihost connect" in den existierenden Master/Slave-Verbund einhängen kann, denn 'iobroker multihost connect' findet den Master nicht!

      Die Konfiguration als Slave muss unbedingt über Environment-Variablen zum Startzeitpunkt des Containers erfolgen. Gleiches gilt, wenn der Container seine States und Objects aus einer bestehenden Redis-(Sentinel) DB oder über einen anderen der möglichen Datenbanktypen erhalten soll. Auch hier funktioniert "iobroker setup custom" zunächst nicht.

      Ich habe mir eine Datei mit den Environment Settings auf meinem Mac in einem lokalen Verzeichnis angelegt. Meine Konfiguration ist für ein Redis Sentinel mit 3 Nodes ausgelegt. Wer nur Redis oder etwas anderes nutzt, muss das entsprechend auf (s)eine IP und den Port 6379 usw. anpassen.

      ioBroker-env/vars.env:
      IOB_MULTIHOST=slave
      IOB_OBJECTSDB_TYPE=redis
      IOB_OBJECTSDB_HOST=192.168.178.xx1,192.168.178.xx2,192.168.178.xx3
      IOB_OBJECTSDB_PORT=26379
      IOB_STATESDB_TYPE=redis
      IOB_STATESDB_HOST=192.168.178.xx1,192.168.178.xx2,192.168.178.xx3
      IOB_STATESDB_PORT=26379

      Um besser an den ioBroker Log-Output des Containers zu kommen, habe ich das Verzeichnis /opt/iobroker mittels '-v' noch auf ein lokales Verzeichnis auf dem Mac-Host gemounted. Achtung: das Verzeichnis muss vor dem ersten Start des Containers unbedingt leer sein, sonst glaubt ioBroker, es handelt sich um eine bereits fertige Installation und kommt aus dem Tritt mit der initialen Installation!

      Zusätzlich habe ich einige wichtige Ports expilzit aus dem Container nach aussen geführt. 'docker --net=host' ist unter MacOS nämlich mit Vorsicht zu genießen, denn es exponiert nur alle Ports auf der IP der Docker-Mac internen Virtualisierungsschicht.

      Mein Docker-Aufruf lautet dann so (kann man natürlich auch noch in ein Dockerfile oder einen Compose-Aufruf packen), wobei ich halt den Container als Slave mit Hostnamen iobroker8 verwende. Der Hostname wird ja über den Parameter '-h' im Docker-Aufruf festgelegt, müsst ihr also nach Bedarf anpassen:

      docker container create --restart always --name iobroker8 --env-file ioBroker-env/vars.env -v /PATH_TO_LOCAL_DIR/ioBroker:/opt/iobroker -p 1880:1880 -p 2001:2001 -p 8081:8081 -p 8082:8082 -p 8088:8088 -p 8284:8284 -p 9000:9000 -p 9001:9001 -h iobroker8 buanet/iobroker

      So weit, so gut. Startet, updated sich, konfiguriert sich - Host wird im ioBroker-Verbund aber nicht als aktiv gezeigt. Und kommt dann in eine Restart-Loop wegen 'error: host.iobroker8 No connection to databases possible, restart'. 'iobroker status' meldet ebenfalls 'no connection to databases possible'.

      Abhilfe ist hier dann doch der Aufruf von 'iobroker setup custom' in einer Shell des Containers. Anscheinend kennt ioBroker die IPs eines Redis oder eines Sentinels zwar aus der Environment-Konfiguration, muss aber trotzdem noch einmal auf dem neuen Slave 'iobroker setup custom' durchlaufen, ehe er den Sentinel Cluster findet und dann dem ioBroker-Verbund als neuer Slave beitritt. Vielleicht ein Bug?

      Vielleicht hilft es ja dem ein oder anderen hier weiter!

      Viele Grüße
      Dirk

      R 1 Reply Last reply Reply Quote 1
      • R
        rewenode @higginsd last edited by

        @higginsd Danke! Ich hatte schon fast augegeben.
        Habe übrigens festgestellt, dass ein leeres gemountetes /opt/iobroker bei mir zum Dauerneustart des Containers führt. Nur wenn ich es vorher lösche eird es angelegt und der Container erstellt.
        Bei mir sind iob-master und redis zum Test auf dem Mac angelegt.
        Der Slave soll auf einem Raspi laufen. Jetzt muss ich noch rausbekommen, wie ich redis im docker beibringen kann, Anfragen vom iob-slave akzeptiren soll.

        Wie hast du das bei dir gemacht?

        Gruß
        Reiner

        H 1 Reply Last reply Reply Quote 0
        • H
          higginsd @rewenode last edited by

          @rewenode

          Hast Du beide Redis Ports 6379 und 26379 im Redis-Container exponiert?

          Bei mir ging das eigentlich easy, ich habe auch eine Redis Instanz und eine Sentinel Instanz in docker laufen.

          R 2 Replies Last reply Reply Quote 0
          • R
            rewenode @higginsd last edited by

            @higginsd Nein, nur 6379. 26379 kannte ich noch gar nicht.
            iob-Master/redis werden mit docker-compose und default network auf dem Mac gestartet.
            Der container-verbund hat dann ja eine eigen Network-ip. Innerhalb des Verbandes gibt es da ohnehin kein Problem. Die expose Ports können ja über die HOST-IP erreicht werden und innerhalb des Verbandes reicht ja der name.
            Bei redis habe ich aber irgendwo mal gelesen, dass da im Standard nur Anfragen von 127.0.0.1 also in dem Fall default-network akzeptiert werden.
            Der slave auf dem Raspi erreicht zwar den Host/port, kommt dann ja aber nicht mehr von 127.0.0.1.
            Scheint so, als ob man das auch mit Sentinel machen könnte (habs nur ganz kurz überflogen).
            Aber bei nur einem zusätzlichen Client(iob-Slave) ist das vlt. gar nicht nötig, wenn es über die config gehen sollte.

            1 Reply Last reply Reply Quote 0
            • R
              rewenode @higginsd last edited by

              @higginsd Ok, Kommando zurück. Läuft! Musste nur etwas warten bis der Host angezeigt wurde.

              Meine Konfiguration ist etwas naja, ungewöhnlich.
              Master im Verbund mit Redis und mqtt-broker auf Mac(Testsystem).
              Slave als native Installation auf einem raspi 1. Hier läuft buanet/docker nicht, weil das Image kein ARMv6 unterstützt.
              Native Installation out of the box geht auch nicht, weil nodejs offiziell auch kein ARMv6 mehr unterstützt. Hier habe ich aber noch irgendwo ein nodev16 paket gefunden, das ich manuell installieren konnte.
              Was redis anbelangt habe ich die config zwar in den host gemappt um sie anpassen zu können, lief aber mit den Default-Werten (bind 127.0.0.1 -::1).
              Warum auch immer. Bin da nicht der redis-Experte.
              Dachte eigentlich, dass ich bind um die Adresse vom Host des Masters erweitern muss. War aber nicht nötig.

              In jedem Fall hast du sehr geholfen. Konnte mir die Installations-Schleife des iob-Containers überhaupt nicht erklären.
              Da das Ganze im Moment noch ein Testsystem ist, werde ich das mal genauer untersuchen.
              Die Installation lief bisher nur sauber durch, wenn ich entweder gar kein iobroker-Verzeichnis hatte, das wird dann bei der Installation angelegt.
              Oder wenn ich nur die STATESDB in die redis geschickt habe:

              IOB_MULTIHOST=master
              IOB_STATESDB_TYPE=redis
              IOB_STATESDB_HOST=redis
              IOB_STATESDB_PORT=6379
              

              Sobald ich

              IOB_OBJECTSDB_TYPE=redis
              IOB_OBJECTSDB_HOST=redis
              IOB_OBJECTSDB_PORT=6379
              

              dazugenommen habe, gab es die Installationsschleife.
              Aber bei so vielen Tests(was ja zum Glück unter Docker fixgeht) kann ich nicht ausschließen, dass der Fehler irgend wo anders her kam.

              Danke nochmal
              Reiner

              Thomas Braun 1 Reply Last reply Reply Quote 0
              • Thomas Braun
                Thomas Braun Most Active @rewenode last edited by

                @rewenode sagte in docker, Multihost auf MacOS:

                Native Installation out of the box geht auch nicht, weil nodejs offiziell auch kein ARMv6 mehr unterstützt.

                Das ist der beschriebene *** SONDERFALL ***:

                https://forum.iobroker.net/topic/35090/howto-nodejs-installation-und-upgrades-unter-debian

                R 1 Reply Last reply Reply Quote 0
                • R
                  rewenode @Thomas Braun last edited by rewenode

                  @thomas-braun sagte in docker, Multihost auf MacOS:

                  Das ist der beschriebene *** SONDERFALL ***:

                  Ja, und der vollständigkeit halber was ich gemacht habe:

                  #wie immer:
                  sudo apt-get update 
                  sudo apt-get upgrade
                  
                  #Now install Node itself
                  
                  #alte löschen
                  sudo apt-get --purge remove nodejs
                  sudo apt-get autoremove
                  sudo reboot
                  
                  
                  # installieren
                  sudo wget https://unofficial-builds.nodejs.org/download/release/v16.17.0/node-v16.17.0-linux-armv6l.tar.gz
                  sudo tar -xvf node-v16.17.0-linux-armv6l.tar.gz
                  cd node-v16.17.0-linux-armv6l
                  sudo cp -R * /usr/local/
                  sudo ln -s /usr/local/bin/node /usr/bin/nodejs
                  

                  Erst danach ioB Standardinstallation.
                  Der Master-Admin tut sich aber sehr schwer, den Rpi1-Host auf der Übersichtsseite anzuzeigen.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate
                  FAQ Cloud / IOT
                  HowTo: Node.js-Update
                  HowTo: Backup/Restore
                  Downloads
                  BLOG

                  605
                  Online

                  32.0k
                  Users

                  80.5k
                  Topics

                  1.3m
                  Posts

                  3
                  7
                  413
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo