ioBroker Docker Image Doku

Dies ist die offizielle Dokumentation für das ioBroker-Docker-Image. Sie enthält alle Informationen die du zum Einrichten und Konfigurieren eines ioBroker-Docker-Containers benötigst.

Wenn du Fragen zur Konfiguration deines ioBroker und seiner Adapter hast, lies bitte die offizielle ioBroker Dokumentationopen in new window.

Hinweis

Die Dokumentation zum ioBroker Docker Image wird grundsätzlich in Englisch geführt. Es kann daher vorkommen, dass die Übersetzung nicht immer auf dem aktuellsten Stand ist. Die englische Version der Dokumentation findest du hier.

Einstieg

Bei Fragen melde dich gerne in den ioBroker Docker Image Discussionsopen in new window zu Wort oder tritt der ioBroker Community im ioBroker Forumopen in new window, Discordopen in new window oder Facebookopen in new window bei.

Bitte vermeide es mich bei Support-Fragen direkt zu kontaktieren. Stelle deine Frage stattdessen lieber in der ioBroker Community und markiere mich bei Bedarf. So können alle ioBroker Benutzer von der Antwort profitieren und du erhältst ggf. auch Unterstützung von anderen Mitgliedern aus der Community.

Wenn du einen Fehler im ioBroker Docker Image gefunden oder eine Idee zur Verbesserung hast würde ich mich freuen wenn du einen Issue auf Githubopen in new window meldest.

Die folgenden Möglichkeiten, einen ioBroker-Container einzurichten, sind nur Beispiele und können je nach Plattform variieren. Möglicherweise musst du Parameter ändern, hinzufügen oder ersetzen, um ioBroker so zu konfigurieren, wie es deinen Anforderungen entspricht.

Starten per Kommandozeile

Um einen ersten Blick auf den ioBroker Docker-Container zu werfen, genügt es, einfach den folgenden sehr einfachen Docker-Befehl auszuführen:

docker run -p 8081:8081 --name iobroker -v iobrokerdata:/opt/iobroker buanet/iobroker:latest

TIP

Es ist immer eine gute Idee, die Verwendung des "latest" Tags für deine Produktivumgebung zu vermeiden. Weitere Einzelheiten findest du unter "Bewährte Methoden".

Starten per docker-compose

Du kannst deinen ioBroker Container natürlich auch per docker-composeopen in new window starten. Hier ein Beispiel:

version: '2'

services:
  iobroker:
    restart: always
    image: buanet/iobroker:latest
    container_name: iobroker
    hostname: iobroker
    ports:
      - "8081:8081"
    volumes:
      - iobrokerdata:/opt/iobroker

TIP

Es ist immer eine gute Idee, die Verwendung des "latest" Tags für deine Produktivumgebung zu vermeiden. Weitere Einzelheiten findest du unter "Bewährte Methoden".

Persistente Daten

Alle Konfigurationsdaten von ioBroker werden in /opt/iobroker gespeichert. Um diese Daten dauerhaft zu speichern, wird empfohlen, während des ersten Starts deines Containers einen (leeren) Ordner oder ein Docker-Volume nach /opt/iobroker zu mounten.
Seit der ioBroker Docker-Version 8.0.0 wird standardmäßig ein Volumen erstellt, wenn du keinen Ordner oder kein Volume nach /opt/iobroker mountest.

Anmerkung

Wenn du einen externen Speicher oder eine Dateifreigabe als ioBroker-Verzeichnis in den Container durchreichst, stelle sicher, dass der Speicher OHNE noexec Parameter eingebunden wurde. Andernfalls kann es zu Problemen bei der Ausführung des ioBroker innerhalb des Containers kommen. Für weitere Informationen wirf einen Blick in die zugehörigen Github Issuesopen in new window.

Umgebungsvariablen (ENV)

Um deinen ioBroker-Container entsprechend deiner Anforderungen zu konfigurieren, ist es möglich, einige Umgebungsvariablen zu setzen. Bitte setze nur die Variablen, die du wirklich benötigst. Variablen, die du nicht setzt und die in der folgenden Tabelle als "Im Standard gesetzt = ja" markiert sind, werden dem Container automatisch hinzugefügt, wenn du einen neuen Container erstellst.

Umgebungsvariable (ENV)Im Standard gesetztStandardwertBeschreibung
AVAHIneinfalseAktiviert den Avahi-Dienst, welcher z.B. vom yahka Adapter verwendet wird, kann "true" oder "false" sein.
DEBUGneinfalseAktiviert die erweiterte Log-Ausgabe für den container, kann trueoder false sein. (!!! Bitte nur setzen wenn wirklich benötigt !!!)
IOB_ADMINPORTnein8081Setzt den Port des ioBroker Admin, muss eine Zahl sein
IOB_BACKITUP_EXTDBneinfalseAktiviert die Backup-Möglichkeit von externen Datenbanken im ioBroker backitup Adapter, kann trueoder false sein. (!!! Bitte stelle sicher, dass du dies gelesen hast !!!)
IOB_MULTIHOSTnein[not set]Setzt den ioBroker als master oder slave für Multihost Unterstützung
IOB_OBJECTSDB_TYPEneinjsonlSetzt den Typ der ioBroker Objects DB, kann jsonl, file(veraltet) oder redis sein
IOB_OBJECTSDB_HOSTnein127.0.0.1Setzt den/ die Host(s) für die ioBroker Objects DB, kann im Fall von Redis Sentinel eine Komma getrennte Liste sein
IOB_OBJECTSDB_PORTnein9001Setzt den/ die Port(s) für die ioBroker Objects DB, kann im Fall von Redis Sentinel eine Komma getrennte Liste sein
IOB_OBJECTSDB_PASSneinnoneSetzt (optionales) Passwort für die ioBroker Objects DB in Redis
IOB_OBJECTSDB_NAMEneinmymasterSetzt den Namen des Redis Sentinel Masters
IOB_STATESDB_TYPEneinjsonlSetzt den Typ der ioBroker States DB, kann jsonl, file(veraltet) oder redis sein
IOB_STATESDB_HOSTnein127.0.0.1Setzt den/ die Host(s) für die ioBroker States DB, kann im Fall von Redis Sentinel eine Komma getrennte Liste sein
IOB_STATESDB_PORTnein9000Setzt den/ die Port(s) für die ioBroker States DB, kann im Fall von Redis Sentinel eine Komma getrennte Liste sein
IOB_STATESDB_PASSneinnoneSetzt (optionales) Passwort für die ioBroker States DB in Redis
IOB_STATESDB_NAMEneinmymasterSetzt den Namen des Redis Sentinel Masters
LANGjade_DE.UTF‑8Die folgenden locales sind vorgeneriert: de_DE.UTF-8, en_US.UTF-8
LANGUAGEjade_DE:deDie folgenden locales sind vorgeneriert: de_DE:de, en_US:en
LC_ALLjade_DE.UTF-8Die folgenden locales sind vorgeneriert: de_DE.UTF-8, en_US.UTF-8
OFFLINE_MODEneinfalseSetze dies aud true wenn dein ioBroker keine oder nur eingeschränkte Verbindung zum Internet hat. (!!! Verwendung auf eigene Gefahr !!!)
PACKAGESnein[not set]Installiert zusätzliche Linux Pakete. Pakete sollten durch Leerzeichen getrennt sein. Beispiel: "Paket1 Paket2 Paket3".
PERMISSION_CHECKneintruePrüft alle nötigen Berechtigungen beim Start des Containers, kann true oder false sein (!!! Verwendung auf eigene Gefahr !!!)
SETGIDja1000In manchen Fällen ist es notwendig die GID des ioBroker Benutzers im Container anzupassen, damit diese zu einer entsprechenden Gruppe auf dem Host System passt.
SETUIDja1000In manchen Fällen ist es notwendig die UID des ioBroker Benutzers im Container anzupassen, damit diese zu einem entsprechenden Benutzer auf dem Host System passt.
TZjaEurope/BerlinSetzt die Zeitzone des Containers. Alle gültigen Linux Zeitzonen sind möglich.
USBDEVICESneinnoneSetzt die notwendigen Berechtigungen auf gemountete Geräte wie z.B. /dev/ttyACM0. Mehrere Geräte mit Semikolon ; trennen /dev/ttyACM0;/dev/ttyACM1

Netzwerke

Die oben genannten Beispiele besitzen keine spezielle Netzwerkkonfiguration. In einem solchen Fall greift Docker auf das standard Bridge-Netzwerk zurück. Grundsätzlich gibt es allerdings ein paar Gründeopen in new window weshalb es sinnvoll sein könnte, ein benutzerdefiniertes Bridge-Netzwerk zu verwenden.

Iobroker in einem Bridge-Netzwerk zu betreiben funktioniert grundsätzlich gut (sofern man die vom Adapter benötigten Ports entsprechend durch reicht) für die meisten ioBroker Adapter, und ist die perfekte Option um einen ersten Blick auf ioBroker zu werfen. Allerdings gibt es Adapter die Techniken wie Multicastopen in new window oder Broadcastopen in new window, z.B. zur automatischen Erkennung von IoT-Geräten im Netzwerk, verwenden. In diesem Fall ist es notwendig sich mit dem Netzwerkmodus hostopen in new window oder dem MACVLANopen in new window auseinander zu setzen.

Weitere Informationen zu Netzwerk unter Docker findest du in der Offiziellen Docker Dokumentationopen in new window.

Erweiterte Konfiguration

Einbinden von USB-Geräten

Für das Einbinden von USB-Geräten in den ioBroker Docker Container ist es erforderlich, das Gerät beim Start des Containers entsprechend einzubindenopen in new window. Außerdem ist es erforderlich das eingebundene Gerät in der Umgebungsvariable USBDEVICES aufzuführen. Letzteres sorgt dafür, dass der ioBroker innerhalb des Containers die nötigen Berechtigungen auf das Gerät bekommt.

Hinweis

Dies ist eine UND Bedingung. Für eine ordnungsgemäße Funktion müssen beide Punkte umgesetzt werden. Allein das setzen der Umgebungsvariable USBDEVICES ist nicht ausreichend.

Startskripte

Mit Hilfe der Startskripte (user scripts) ist es möglich beim Start des ioBroker Containers eigene Skripte ausführen zu lassen. Aktiviert wird das Feature indem man, analog zum ioBroker Ordner, einen weiteren Ordner (oder ein Volume) unter /opt/userscripts mountet.

Nach dem Start befinden sich dann zwei Beispielscripte im Ordner. Zur Aktivierung der Scripte muss lediglich die Endung _example im Namen des Scripts entfernt werden. Das Script userscript_firststart.sh wird nur beim allerersten Start eines neuen Containers ausgeführt, das Script userscript_everystart.sh bei jedem Containerstart.

Probiere es einfach aus. In den Scripten ist Beispielcode enthalten der eine Ausgabe im Log des Containers erzeugt. Den entsprechenden Abschnitt findest du im Log in Step 4 of 5: Applying special settings.

Multihost

Mit Hilfe der Umgebungsvariablen IOB_MULTIHOST und den Umgebungsvariablen für Objects und States DB Verbindungen lässt sich der ioBroker Container als Multihost Master oder Slave betreiben. Diese Funktion richtet sich mehr oder weniger an erfahrene Benutzer. Bitte stelle vor der Konfiguration der Umgebungsvariablen sicher, dass du mit dem Multihost-Feature von ioBroker vertraut bist und weißt was der Befehl iobroker setup custom tut.

Bei der Verwendung der Umgebungsvariablen für den Multihost Betrieb ist keine Ausführung von iobroker multihost enable oder iobroker multihost connect innerhalb des Containers notwendig. Bei korrekter Konfiguration wird all dies durch das Startscript des Containers erledigt.

Allgemeine Informationen zur Multihost-Funktion von ioBroker findest du in der Offiziellen ioBroker Dokumentationopen in new window.

Redis

Mit v8.0.0 des ioBroker Docker Images wurde die Integration von Redis als Object und/ oder States DB komplett überarbeitet und erweitert. Grundsätzlich basiert die Konfiguration lediglich auf den Umgebungsvariablen für DB TYPE, HOST und PORT. Mit der Unterstützung von Authentifizierung und Redis Sentinel sind jetzt allerdings noch weitere Features verfügbar wie etwa Authentifizierung oder die Unterstützung für Redis Sentinel Cluster.

Für einige grundlegende Informationen zum Thema Redis und ioBroker lies bitte unbedingt diesen ioBroker Forum Post von Apollon77open in new window.

Authentifizierung

Mit den Umgebungsvariablen IOB_OBJECTS_DB_PASS und IOB_STATESDB_PASS ist es möglich eine Authentifizierung beim Zugriff auf die Redis Datenbank zu benutzen. Damit dies funktioniert ist eine entsprechende Konfiguration von Redis über die redis.conf erforderlich.

Redis Sentinel Cluster

Es ist außerdem möglich einen Redis Sentinel Cluster für die Objects und/ oder States DB zu verwenden. Diese Feature wird in ioBroker automatisch konfiguriert, wenn die Umgebungsvariablen IOB_OBJECTSDB_HOST und/ oder IOB_STATESDB_HOST eine Komma getrennte Liste enthalten. Falls gewünscht können analog dazu auch die Umgebungsvariablen IOB_OBJECTSDB_PORTund/ oder IOB_STATESDB_PORT Komma separierte Listen enthalten. Die Ports werden dann in der angegebenen Reihenfolge für die Hosts verwendet.
Die Verwendung der Umgebungsvariablen IOB_OBJECTSDB_NAME und IOB_STATESDB_NAMEist optional. Wird kein Wert gesetzt nutzt der ioBroker den Redis Default Wert mymasterals Namen für die Redis Sentinel Master DB.

Wartung

Sicherung

Der einfachst Weg deinen ioBroker zu sichern ist die Verwendung des integrierten iobroker backup Kommandosopen in new window oder des iobroker.backitup Adaptersopen in new window.

Eine Weitere Möglichkeit ist das Sichern des Verzeichnisses, welches du unter "/opt/iobroker" in den Container gemountet hast. Die Sicherung erfolgt dabei über den Docker Host. Beim Kopieren, Verschieben oder Packen der Dateien sollte der ioBroker Container gestoppt sein.

Hinweis

Beim direkten Kopieren des Verzeichnisses sollte darauf geachtet werden, dass alle Berechtigungen der Dateien und Verzeichnisse erhalten bleiben.

Sichern von externen Datenbanken mit iobroker.backitup im Docker Container

Für die Sicherung von externen Datenbanken (z.B. Redis, InfluxDB, PostgresSQL und MySQL) über den iobroker.backitup Adapter im Docker Container gibt es einige Einschränkungen. Dieser kleine Leitfaden hilft dir dabei zu verstehen warum einige Optionen im Adapter standardmäßig ausgegraut sind und was man dagegen tun kann.

Wiederherstellung

Die Wiederherstellung deines ioBrokers kannst du über das integrierte iobroker backup Kommandoopen in new window oder den iobroker.backitup Adapteropen in new window erledigen.

Aktualisierung (Update)

WARNUNG

Bitte versichere dich, dass du ein gültiges Backup hast bevor du Updates oder Upgrades durchführst!
Außerdem ist es absolut empfehlenswert vor dem Update des Containers alle Adapter, sowie den js-controller auf den letzten Stand (stable) zu bringen!

Linux System Pakete aktualisieren

Die im ioBroker Docker Image enthaltenen Linux Pakete lassen sich manuell über den integrierten Paketmanager apt aktualisieren. Dabei unterscheidet sich die Vorgehensweise nicht von der anderer auf Debian basierender Linux Systeme und erfolgt über die Kommandozeile des Containers.

Beachte, dass der empfohlene Weg allerdings das Herunterladen des aktuellen ioBroker Docker Images und anschließende Neuerstellen des Containers ist.

ioBroker Adapter Aktualisierungen

Die ioBroker Adapter sind Teil deiner ioBroker Installation und werden daher nicht durch erneuten Download des Docker Images aktualisiert. Ob Aktualisierungen für deine Adapter vorliegen erfährst du über die ioBroker Admin Oberfläche. In der Regel lassen sich die Aktualisierungen auch dort durchführen. Mehr Informationen dazu findest du in der Offiziellen ioBroker Dokumentationopen in new window.

ioBroker js-controller Aktualisierungen

Mit mindestens ioBroker Docker Image v8.1.0, js-controller v5.0.10 und admin v6.9.1 ist es jetzt möglich, js-controller direkt von der Admin-Benutzeroberfläche aus zu aktualisieren, indem du einfach auf die Schaltfläche "Aktualisieren" im Tab "Hosts" klickst.

Natürlich kannst du immer noch das js-controller-Upgrade über die Befehlszeile durchführen.

Ohne die Hilfe des Maintenance-Scripts, auch bekannt als "der hacky Weg"

pkill -u iobroker
iobroker update
iobroker upgrade self

Anschließend muss der Container manuell neu gestartet werden.

Mit Hilfe des Maintenance-Scripts, auch bekannt als "der empfohlene Weg"

maintenance on
maintenance upgrade
maintenance off

Abhängig von der Restart Policy des Containers wir der Container automatisch gestoppt/ neu gestartet.

Hochrüstung (Upgrade)

Wenn du deine ioBroker-Installation auf eine neue Hauptversion des ioBroker Docker-Images (z. B. von v7.x.x auf v8.x.x) aktualisierst, führt dies zu einem Upgrade. Während Updates normalerweise keine Auswirkungen auf die Funktion deines ioBrokers haben sollten, können Upgrades einige "Breaking Changes" enthalten und zusätzliche Schritte erfordern.
Wenn du planst, deinen Docker-Container auf eine neue Hauptversion zu aktualisieren, stelle sicher, dass du die Release Notesopen in new window gelesen hast.

WARNUNG

Es besteht immer ein geringes Risiko eines Fehlers beim Upgrade auf eine neue Hauptversion. Um dieses Risiko zu minimieren, stelle sicher, dass dein js-controller und deine Adapter auf dem neuesten Stand sind und prüfe erneut ob du ein gültiges Backup deines ioBrokers hast!

Im Allgemeinen erfolgt das Upgrade auf eine neue Hauptversion genauso wie jedes andere Update eines Docker-Images, indem du deinen Container einfach aus dem neuen ioBroker Docker-Image neu erstellst.

Es gibt einige seltene Fälle, wenn die neue Hauptversion des Docker-Images eine neue Hauptversion von Node enthält, bei denen der js-controller einige Adapter nicht erfolgreich neu kompilieren kann. Wenn dies geschieht, versuche bitte, die betroffenen Adapter neu zu installieren, und sieh dir das interne ioBroker-Protokoll an.

Falls du mögliche Upgrade-Probleme von vornherein vermeiden oder mit einem sauberen ioBroker-Verzeichnis beginnen möchtest, ist es immer eine gute Option, das Backup- und Wiederherstellungsverfahren zu verwenden. Du kannst dies durch folgende einfache Schritte tun:

  1. Erstellen eines neuen Backups
  2. Erstellen eines neuen, leeren Verzeichnisses für die ioBroker Daten auf dem Host
  3. Kopieren der letzten Backup-Datei in das neue Verzeichnis
  4. Stoppen und Löschen des alten Containers
  5. Erstellen eines neuen Containers aus dem aktuellsten Image mit der selben Konfiguration wie zuvor, aber mit dem neuen Verzeichnis als ioBroker Datenverzeichnis
  6. Beobachten des Container Logs beim Start des neuen Containers bis ioBroker gestartet wurde
  7. Wiederherstellen des Backups über die Kommandozeile oder den ioBroker.backitup Adapter
  8. Überprüfen der Installation der Adapter nach erfolgreicher Wiederherstellung

Docker Health Check

Seit v5.1.0 enthält das ioBroker Docker Image einen Docker Health Check (Gesundheitscheck). Dieser prüft ob im Container der js-controller läuft und meldet dem Docker Dienst entsprechend "healthy" (gesund) or "unhealthy" (nicht gesund) zurück.

Der Health Check macht bei seinem Test bis zu 5 Versuche in einem Interval von 15s mit einem Timeout von 5s. Dementsprechend würde der Container frühestens 60 Sekunden nachdem der js-controller beendet ist den Status "unhealthy" einnehmen.

Pro Tip

Da Docker selbst keine Aktionen aufgrund des healthy/ unhealthy Status eines Containers erlaubt, braucht es für eine Aktion (z.B. Neustart) einen Watchdog. Für genau diesen Zweck habe ich das folgende Projekt gestartet: Watchdog for Dockeropen in new window.

Bewährte Methoden

Vermeide latest Tag

Das Docker Tag "latest" (buanet/iobroker:latest) zeigt immer auf die aktuellste Version des Docker Images. Daher kann es vorkommen, dass beim Neuladen (z.B. Recreate) des Docker Images unbewusst eine neue Hauptversion geladen wird und ungewollt eine Hochrüstung (Upgrade) angestoßen wird.

Damit dies nicht geschieht ist es in einer Produktivumgebung sinnvoll einen Versionstag zu verwenden. Für eine spezielle Version z.B. "buanet/iobroker:v5.2.0" oder für einen ganzen Hauptversionszweig z.B. "buanet/iobroker:latest-v5". So sind Aktualisierungen des Docker Images gefahrlos möglich und man hat immer die Kontrolle über die verwendete Version.

Benutze Maintenance Script

Das ioBroker Docker-Image enthält ein kleines Wartungsskript, das dir bei der Verwaltung deines ioBroker Docker-Containers hilft. Du kannst dieses Skript beispielsweise verwenden, um deinen Container in den Wartungsmodus zu versetzen (ioBroker wird gestoppt, aber der Container bleibt gesund) und js-controller-Updates anzuwenden. Gib einfach maintenance --help an der Befehlszeile des Containers ein, um zu sehen, was das Skript für dich tun kann.

Mit Docker-Image v9.0.0 wurden einige Sicherheitsänderungen am Wartungsskript vorgenommen. Es ist jetzt nicht mehr möglich, das Skript als Benutzer root aufzurufen. Da die Verwendung von root auf der Befehlszeile von Containern sehr geläufig ist, wurde dieses Problem behoben, indem der Befehl maintenance in den iobroker-Befehl aufgenommen wurde. Zum Beispiel so:

iobroker maintenance on
iob maint on
iob m on

Dadurch wird sichergestellt, dass der Befehl immer als Benutzer iobroker ausgeführt wird.

Migrieren der States zu Redis

Falls du eine existierende ioBroker Installation zu Redis als Objects und/ oder States DB migrieren willst, empfiehlt es sich, die Migration mit Hilfe des Befehls iob setup custom zunächst innerhalb des Containers durchzuführen. Nur so ist es möglich die bereits vorhandenen Objekte und Zustände zu Redis zu migrieren. Im Anschluss daran sind dann natürlich die entsprechenden Umgebungsvariablen für den Container zu setzen. Für weitere Informationen zu iob setup custom wirf bitte einen Blick in die offizielle ioBroker Dokumentationopen in new window.

HINWEIS

Damit iob setup custom funktioniert muss der ioBroker innerhalb des Containers gestoppt werden. Dazu empfiehlt es sich den Container mit Hilfe des Maintenance Scripts in den Maintenance Mode zu versetzen.

Sonstiges

Beta Tester

Falls du stets die neusten Korrekturen und Funktionen des Docker Images nutzen möchtest bist du herzlich dazu eingeladen unsere Beta-Versionen zu verwenden. Für mehr Informationen wirf am Besten einen Blick auf die Docker image releasesopen in new window und/ oder beteilige dich an der Diskussion im ioBroker Discord Channel > Beta Testing & Feedback > docker-imageopen in new window.
Vielen Dank.

Hinweise für Entwickler

...sind leider nur in englisch verfügbar.


⚠️ In Arbeit ⚠️

Diese Dokumentation ist noch in Arbeit. Wenn du Verbesserungsvorschläge hast, lass es mich wissen indem du einen issueopen in new window meldest oder gleich selbst editierstopen in new window und einen pull request erstellst.

Falls noch Fragen unbeantwortet geblieben sind, schaue gerne in der ioBroker Community auf Discordopen in new window, Facebookopen in new window oder im ioBroker Forumopen in new window vorbei.

Last Updated: