ioBroker Docker Container – Updates & Upgrades
Wie halte ich meine ioBroker-Installation aktuell? Eine kurze Frage die aber durchaus etwas komplexer zu beantworten ist. Daher im folgenden erst einmal ein paar ausführliche Informationen sowie einfache Kurzanleitungen zu den verschiedenen Updates.
Updates der ioBroker Adapter
Die Aktualisierung der ioBroker Adapter erfolgt in der Regel über die Weboberfläche des ioBroker Admins. Unter Anderem über eine Zahl neben dem Menüpunkt „Adapter“ werden verfügbare Updates signalisiert. Über die Adapter-Übersicht lassen sich die Updates dann installieren. Soweit, so einfach.
Hinweis
Die Adapter sind im Ordner /opt/iobroker
installiert, den wir ja (hoffentlich) auf den Docker-Host ausgelagert haben. Diese Tatsache erklärt auch, warum Adapter nicht aktualisiert werden wenn man den Container selbst aktualisiert!
Alternativ lassen sich die Adapter natürlich auch über die Kommandozeile aktualisierten. Weitere Infos zur Bedienung des ioBrokers über die Kommandozeile findet ihr in der offiziellen Dokumentation der Konsolenkommandos.
Update des js-controllers
Mit dem js-controller verhält es sich zuerst einmal wie mit den ioBroker-Adaptern. Er ist ebenfalls in Ordner /opt/iobroker
installiert und wird nicht aktualisiert wenn man den Container über sein Image aktualisiert. Allerdings ist es aktuell nicht möglich den js-controller über die Weboberfläche des ioBroker Admins zu aktualisieren. Um den js-controller zu aktualisieren ist also zwingend die Kommandozeile zu bemühen.
Damit das Update funktioniert muss der js-controller innerhalb des laufenden Containers beendet werden. Ohne js-controller kein ioBroker, daher wird damit natürlich der gesamte ioBroker inkl. aller Adapter gestoppt.
Und hier kommen wir zu einer Besonderheit des ioBroker Containers. Während der js-controller auf anderen Systemen über den ioBroker Dienst gesteuert wird, startet er im Container „nur“ als normaler Prozess. Aus diesem Grund sind die Kommandos iobroker stop
und iobroker start
im Container auch teilweise ohne Funktion und sollten nicht verwendet werden!
Um den ioBroker und den js-controller innerhalb des Containers zu beenden werden über den Konsolenbefehl pkill -u iobroker
kurzerhand alle Prozesse des Benutzer „iobroker“ beendet. Anschließend kann der js-controller wie auf jedem anderen Linux System aktualisiert werden.
Nach der Aktualisierung muss der ioBroker neu gestartet werden. Das geht theoretisch auch über einen Befehl, allerdings empfehle ich dringend dies einfach über den Neustart des Containers zu erledigen.
Im Detail würde sich also die komplette Prozedur des Updates über die folgenden beiden Befehle erledigten lassen:
pkill -u iobroker
iobroker update
iobroker upgrade self
Anschließend ist dann, wie bereits angesprochen, der Container zu beenden und neu zu starten.
Update des Containers
Nachdem wir jetzt alles über die Updates innerhalb des ioBrokers wissen, bleibt noch der Container selbst. Im Container, bzw. dem Image aus dem der Container gestartet worden ist, sind alle Softwarepakete enthalten die der ioBroker zum Laufen benötigt. Wenn man es nicht so ganz genau nimmt dann könnte man sagen, es ist praktisch das Betriebssystem in dem der ioBroker ausgeführt wird.
Natürlich gibt zu den einzelnen Paketen die im Container enthalten sind auch immer wieder Updates. Prominente Pakete sind zum Beispiel „node“ und „npm“, die ihr vermutlich schon aus Weboberfläche des ioBroker Admin kennt.
Wer weiß wie man in einer Linux Umgebung über die Kommandozeile Updates abruft und installiert, der kann dies im Grunde genauso auch über die Kommandozeile innerhalb des Containers tun. Zum Beispiel in etwas so:
apt-get update && apt-get upgrade -y
Ich persönlich bevorzuge allerdings einen anderen Weg, denn über Portainer ist es möglich ein Update des Containers mit wenigen Klicks einfach über die Weboberfläche zu erledigen. Dabei wird praktisch der alte Container gelöscht, die aktuelle Version des Images herunter geladen und der Container wieder neu gestartet.
Achtung
Das Update über einen neuere Version des ioBroker Docker Images funktioniert innerhalb einer Major Version (z. B. v5.x.x) problemlos.
Beim Upgrade, also dem Wechsel der Major Versions (z.B. von v4.x.x auf v5.x.x) gibt es in der Regel auch immer eine neue Major Version der node-Pakets im Image. Hier wären unter Umständen nach dem Update des Containers noch weitere Schritte innerhalb des ioBrokers notwendig damit der ioBroker wieder ordnungsgemäß funktioniert (Mehr Infos dazu in der ioBroker Doku zum Thema Node Update).
Aus diesem Grund empfehle ich ein Upgrade des Containers immer über die Funktion Backup und Restore durch zu führen. Mehr Infos zu Backup und Restore hier: ioBroker Docker Image – Backup & Restore.
Kurzanleitung: Update des Containers über Portainer
Wir öffnen also unsere Portainer Weboberfläche und öffnen mit einem Klick auf unseren ioBroker Container unter dem Menüpunkt „Containers“ die „Container details“.
Anschließend suchen wir den Button „Recreate“. Durch einen weiteren Klick öffnet sich ein Fenster in dem wir die Checkbox für „Pull latest image“ aktivieren. Mit einem Klick auf den Button „Recreate“ starten wir den Prozess.
Hinweis
Wenn ihr beim Neuerstellen des Containers Parameter ändern oder auf eine andere Version des Docker Images wechseln wollt, dann schaut euch doch mal die Funktion hinter dem Button „Duplicate/ Edit“ an.
Kleiner Tip dazu: „Duplicate/ Edit“ funktioniert am Besten wenn ihr vorher den Container beendet.
Im Grunde sollte es das gewesen sein. Ich hoffe ich habe alles berücksichtigt und nichts vergessen. Falls euch auffallen sollte, dass etwas fehlt oder mißverständlich erklärt ist, lasse es mich bitte wissen. Am Besten und schnellsten geht das über die Kommentarfnktion. Danke!
MfG,
André
Hi, meine js-Controller will seit langem nicht mehr Updaten.
Ich weiß nicht was ich machen soll. HILFE 😉
root@iobroker:/opt/iobroker# iobroker upgrade self
Update js-controller from @3.2.16 to @3.3.18
NPM version: 6.14.15
npm install iobroker.js-controller@3.3.18 –loglevel error –unsafe-perm –prefix „/opt/iobroker“ (System call)
npm ERR! code EEXIST
npm ERR! path /opt/iobroker/node_modules/.bin/mkdirp
npm ERR! Refusing to delete /opt/iobroker/node_modules/.bin/mkdirp: ../mkdirp/bin/cmd.js symlink target is not controlled by npm /opt/iobroker/node_modules/mkdirp
npm ERR! File exists: /opt/iobroker/node_modules/.bin/mkdirp
npm ERR! Remove the existing file and try again, or run npm
npm ERR! with –force to overwrite files recklessly.
npm ERR! A complete log of this run can be found in:
npm ERR! /opt/iobroker/.npm/_logs/2021-11-23T17_15_15_736Z-debug.log
Starting node restart.js
Hallo Thaddäus,
wenn du dringend Hilfe benötigst ist das hier vielleicht nicht die beste Anlaufstelle. Wende dich doch bitte mit deinem Problem an die Community. z.B. über das ioBroker Forum oder den Discord Channel.
Alternativ kannst du auch deine Fehlermeldung nochmal gründlich lesen. Scheint mir als stünde die Lösung schon drin:
MfG,
André
Hi Zusammen, ist ein Update des Node JS geplant, oder kann man das selbst tun? Empfohlen ist ja Neuerdings v14.18.1.
Ach Leute, was soll denn diese Frage immer wieder? Aus welchem Grund sollte denn kein Update des Containers geplant sein, wenn doch ioBroker neuerdings node v14 empfiehlt?
Schau mal bitte bei den Docker Tags. Es gibt seit längerem schon eine Beta Version mit node14. Happy Testing.
Alternativ hast du die Möglichkeit einfach noch ein paar Tage Geduld zu haben. Dann werde ich es sicher (in meiner Freizeit) schaffen die neue Version des ioBroker Docker Images zu publishen.
Bei Fragen schaue gern in der ioBroker Discord Community vorbei. Dort stehe ich regelmäßig für Fragen zu Verfügung.
MfG,
André
Hallo,
ich habe Node.js v12.22.7 installiert. Ich erhalte den Hinweis, Empfohlene Version v14.18.1. Wie kann ich das updaten?
Hallo Hartmut,
nodejs wird in der Regel durch ein Update des Containers auf eine neue Version des Docker Image durchgeführt. Allerdings ist das Docker Image mit nodejs noch nicht als stable verfügbar. Infos zu Updates & Upgrades findest du hier.
Du hast aktuell mehrere Optionen: Auf das Docker Image v6.0.0 warten, den ioBroker Docker Image Tag „beta-node14“ verwenden, oder die Nodejs-Version manuell innerhalb des Containers Updaten.
Bei Fragen schaue gerne mal in der ioBroker Discord Community vorbei. Dort bin ich regelmäßig anzutreffen.
MfG,
André
Ups – sorry: Ich habe gerade gesehen, daß zwave 2.0 ab 12.22.2 lauffähig ist – ein „reload“ im Admin-Portal und ich konnte updaten. Wer lesen kann ist klar im vorteil 🙁
Ich habe meinen Container mit Portainer auf den aktuellen stand gebracht. Trotzdem ist immer noch die Version 12.22.7 von node.js installiert. der zwave 2.0 adapter hätte aber gern die version 16 von node.js. Ist eine Version des containers mit node.js 16 geplant?
Hallo Martin,
natürlich wird von Zeit zu Zeit auch die Nodejs Version im Image aktualisiert. Dies passiert in der Regel mit jeder neuen Major Version des Images. Zusätzlich gibt es als Beta Version auch immer schon eine Version mit der nächsten Nodejs Version (in diesem Fall 14). Aktuell wird vom ioBroker noch V12 empfohlen. Sobald sich die Empfehlung ändert geht v14 in der Image Version 6 live und node v16 ins Beta. Mehr Infos und die verfügbaren Tags hier.
MfG,
André
Ich nutze die Container-Version 5.2.0 und sowohl „pkill -u iobroker“ als auch „maintenance on“ bringen den conatiner bei mir dazu neu zu starten – ich kann den js-controller also nicht updaten.
der output vom maintenance script:
Do you want to continue [yes/no]? yes
Activating maintenance mode…
sleep: cannot read realtime clock: Operation not permitted
Done.
Stopping ioBroker…
sleep: cannot read realtime clock: Operation not permitted
Done.
Was kann ich denn jetzt noch probieren, um den js-controller zu aktualisieren? (armv71)
das hier github.com/buanet/ioBroker.docker/issues/199 war die lösung…
wird es dafür noch irgendwie einen fix geben oder kann man das docker-seitig garnicht angehen?
Hallo Sven,
da gibt es von meiner Seite aus nicht viel zu fixen. Ich kann aus dem Docker Image heraus ja keinen Einfluss darauf nehmen welche Pakete bzw. Paketversionen auf dem Docker Host installiert sind.
Da hilft nur Google und selbst fixen. Ich gehe aber mal davon aus, dass irgendwann das relevante Paket in der notwendigen Version auch den Weg in die Arm Betriebssysteme finden wird.
Bis dahin heißt es wohl per Hand patchen…
MfG,
André
Hallo André,
vielen Dank für die guten Erklärungen. Damit ist es sogar einem alten Mann wie mir gelungen, mich langsam in die Materie einzumummeln.
Bisher hatte ich immer noch V 4.x.x laufen und dann irgendwann keine Updates mehr durchgeführt, weil ich ja damals „latest“ genommen habe und inzwischen ein Versionswechsel stattgefunden hat.
Nun habe ich mich entschieden einen neuen Container mit Backup/Restore und dem „latest-v5“ zu erstellen.
Verstehe ich es richtig, dass ich nun die oben beschriebene Updatevariante über Portainer so lange nutzen kann, auch wenn es mal eine 6.x.x gibt? Also einfach immer einfach „latest-v5“ updaten, da „latest“ ja irgendwann eventuell 6.x.x ist.
Hallo Jörg,
das ist korrekt. Bei latest-v5 bleibt der Container immer in der letzten V5 Version, auch wenn bereits eine V6 existiert. Damit sind eigentlich keine Probleme bei automatischen Updates des Containers zu erwarten.
MfG,
André
Hallo, mit dieser Anleitung konnte ich node auf v12x upgraden, aber mit dem js-controller klapot es nicht.
Meine Schritte:
– In Syno/Docker den laufenden Container iobroker aufrufen
– Darin Terminal öffnen
– „pkill – u iobroker“ eingeben.
Keine Antwort, nach einiger Zeit „Error by sending. Error: No reply in 247s“
Was mache ich den falsch?
Vielen Dank für Hnweise.
Grüße, Eckart
Hallo Eckart,
kann ich dir so nicht sagen. In deinem Kommando ist zwar ein Leerzeichen zu viel (-[Leerzeichen]u) aber ich gehe mal davon aus, dass du das so nicht verwendest hast. Die Fehlermeldung wäre dann eine andere.
Ich vermute eher dass du mit deiner Konsole vielleicht keine richtige Verbindung hast. Hast du den Container mal neu gestartet und dich dann auf die Konsole verbunden? Wie greifst du auf die Konsole zu und mit welchem User?
Außerdem spielt die Container Version unter Umständen auch eine Rolle. Wenn du eine sehr alte Version nutzt, die du immer nur manuell aktualisiert hast, kann es sein dass der Befehl nicht ordnungsgemäß funktioniert. Da ich deine Versionen und dein Log nicht kenne, kann ich das aber nicht bewerten.
Meine Empfehlung: Starte mal den Container neu und Poste das Log und deine Fehlerbeschreibung und vielleicht auch die Ausgabe auf der Konsole im ioBroker Forum Thread zum Docker Container. Dann schauen wir uns das mal an.
MfG,
André
Hallo André,
jetzt habe ich es hingekriegt, aber nur über die Konsole des ioBroker-Containers, die ich in Portainer aufgerufen habe. Der Aufruf der ioBroker-Konsole in der Docker-App geht ins Leere, und, das habe ich bei der Fehlersuche auch bemerkt, auch der Terminal-Adapter „ioBroker simple terminal Adapter“ meldet nur „connection lost“. Ein Mirakel.
Aber wenigstens konnte ich mit der Portainer-Konsole den js-controller auf den aktuellen Stand bringen.
Viele Grüße, Eckart
hallo zusammen
ich hatte das gleiche Problem wie Eckart.
hae dann in einem Thred irgend wo gelesen das noch weitere dieses problem haben.
Es wurde vorgeschlagen dies mit dem Befehl „pkill io“ zu probieren. bei mir hat dies geklappt.
@Andre, evt wäre dies eine sinnvolle ergänzung in deinem absolut genialem Tutorial!
Herzlichen Dank für diese tolle Arbeit!
Hallo Roger,
ich glaube nicht, dass du das selbe Problem wie Eckart hattest. Sein Problem war offensichtlich nicht der Befehl sondern die Verbindung zum Terminal die offenbar über die Docker App (ich vermute er meint damit die Admin Oberfläche auf der DS) nicht funktionierte.
Hinsichtlich „pkill io“ werde ich den Befehl hier nicht mehr mit aufnehmen. Früher war dies mal der Weg den ioBroker im Container zu stoppen. Das ist in der aktuellen Version nicht mehr der Fall. Führt man den Befehl dort aus beendet dies den gesamten Container. Daher „pkill -u iobroker“. Nur dann läuft ein Prozess an, der den Container weiter am leben hält.
Alternative: In der aktuellen Version habe ich ein „maintenance script“ eingebaut. Dies soll in Zukunft das starten/ stoppen sowie das js-controller Update übernehmen. Aktuell ist das Feature aber noch im Beta Status.
MfG,
André
Hallo André
Danke für deine Erläuterungen!
ich bin jetzt etwas verwirrt, da ich gemäss deiner Anleitung oben alles aktualisiert habe (mit iobroker upgrade self und den doker habe ich über get-apt… geupdatet.
eine Ausgabe von PS zeigt mir aber nach wie vor io.xxxxx Prozesse. Ein pkill -u iobroker bringt bei mir immer noch nichts.
Wenn ich es richtig verstehe wäre es vermutlich sinnvoll den Doker zu schmeissen und den neusten neu zu installieren?
Ich habe die Erstinstallation streng nach deinen regeln befolgt.
das heisst ich habe in der Syno Doker Konsole unter Überblick Volumes zwei Volumes:
docker/iobroker_transfer -> /opt/transfer
docker/iobroker_mount -> /opt/iobroker
Wenn ich das System richtig verstanden habe, liegen meine Daten alle ausgelagert auf den beiden Docker Verzeichnissen und ich kann den Docker löschen und neu erstellen?
Was wäre deine Empfehlung zum genauen vorgehen?
liebe grüsse aus der Schweiz
Hallo Roger,
wenn bei dir „pkill -u iobroker“ nichts tut dann arbeitest du mit einer alten Version des Container Images. Die Version des Containers sollte dir im Log angezeigt werden wenn du den Container startest.
Mit „apt-get…“ aktualisierst du lediglich die Linux Pakete die in deinem Container installiert sind. Du wird darüber nie die eigentliche Version des Containers aktualisieren.
Wenn du die aktuelle Version des Containers nutzen willst und auf eine neue Major Version aktualisierst (z.B. von v4 zu v5) dann solltest du über Backup und Restore arbeiten. Bleibst du in der selben Major Version, dann reicht es den alten Container zu entfernen und mit dem neuen Image neu zu erstellen. Details dazu auch hier in der readme auf Github.
Da deine Verzeichnisse (wie es sein sollte) ausgelagert sind. Sollte das alles kein Problem sein.
Mein Tipp: Erstelle dir vor der Aktion einfach eine Kopie der/des gemounteten Verzeichnisses und merke dir die Image Version oder nutze das neue Image einfach mit dem Versionstag anstatt „latest“. Dann kannst du im Prinzip jederzeit zurück.
Falls du unsicher bist, schaue mal im ioBroker Discord Channel vorbei. Bin dort regelmäßig aktiv, dann können wir uns gerne mal unterhalten. 🙂
MfG,
André
Wieso wird mir bei Installation von v5.1.0 nur die Version 4.2.1 angezeigt?
Hallo Marcel,
es ist mir leider unmöglich auf solch eine Frage zu antworten. Du wirst wohl etwas konkreter werden müssen.
MfG,
André
Hallo André,
ich habe die Version 5.1.0 als Docker-Container installiert. Allerdings wird mir oben rechts im Webfrontend bei der ioBroker Version nur die 4.2.1 angezeigt. Oder hat die Docker-Image Version nichts mit der ioBroker Version zu tun?
Hallo Marcel,
das ist korrekt. Die Version des ioBroker Docker Images hat nichts mit der Version des ioBroker zu tun.
MfG,
André
Verwirrend war an der Stelle halt, dass die letzte 4er Docker-Version die 4.2.0 ist, daher war ich davon ausgegangen, dass die Versionen gleich sind. Dann muss man da wohl einfach aufpassen. Danke für die Info.
Vielen Dank für das Bereitstellen des Docker Images für iobroker. Super Arbeit!
Aber, wäre es möglich in den Container auch den redis-server zu integrieren?
Hallo,
sicher wäre das möglich. Allerding wäre das großer Unfug. 🙂
Bitte lies nochmal ein wenig über die Funktionsweise und den „Vorteil“ von Docker gegenüber herkömmlichen Virtualisierungen. Dann wirst du erkennen, dass es keinen Sinn ergibt wenn man alle möglichen Services in einen einzelnen Container packt… Die Devise lautet: ein Service, ein Container (auch wenn das genau genommen beim ioBroker nicht stimmt).
MfG,
André
eventuell wäre docker compose oder die stacks unter portainer da ja etwas für dich