OH 3.4.5 auf Docker Container
Ab sofort läuft OpenHAB in einem Docker Container, ein Erfahrungsbericht.
Wie immer stellt sich bei einer Umstellung die Frage: Warum soll ich das machen, was ist der Nutzen, was ist der Aufwand?
Mein Grund für die Umstellung war, dass beim apt-get upgrade das OH von 3.x auf 4.x upgegraded wurde und dann nichts mehr funktioniert hat und es dann lang gebraucht hat, bis alles wieder gelaufen ist. Beim Upgrade wird ja im /etc/apt/sources.list.d Verzeichnis nachgeschaut, was aktuallisiert werden soll und dort gibt es die Datei openhab.list in der steht, von wo die Updates kommen. Eigentlich dachte ich, dass ich das upgrade auf die version 4 ausgeschaltet hatte, aber war anscheinend nicht so.
Damit war für mich klar. Jetzt portiere ich alles in einen Docker Container. Da ich das managen der container Umgebung über Portainer mache, wurde kurzerhand dort ein neuer stack angelegt und folgendes docker-compose file erzeugt.
version: '3.8'
services:
openhab3:
image: openhab/openhab:3.4.5
restart: always
volumes:
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
- "openhab3_conf:/openhab/conf"
- "openhab3_addons:/openhab/addons"
- "openhab3_userdata:/openhab/userdata"
environment:
CRYPTO_POLICY: "unlimited"
EXTRA_JAVA_OPTS: "-Duser.timezone=Europe/Berlin"
OPENHAB_USER: "openhab"
OPENHAB_GROUP: "openhab"
OPENHAB_HTTP_PORT: "8080"
OPENHAB_HTTPS_PORT: "8443"
# If you need more memory
#EXTRA_JAVA_OPTS: "-Xms1024m -Xmx2048m -Duser.timezone=${TZ}"
USER_ID: 9001
GROUP_ID: 9001
labels:
- "com.centurylinklabs.watchtower.enable=true"
network_mode: host
volumes:
openhab3_conf:
external: true
openhab3_addons:
external: true
openhab3_userdata:
external: true
Ich lege alle Volumes vorher über den docker Befehl docker volume create xxx an. Das hat für mich den Vorteil, dass alle Volumes am Host System unter /var/lib/docker/volumes zu finden sind. D.h. ich brauch nur von dort alle Unterverzeichnisse sichern. Kopiere über WinSCP die Dateien vom Debian Server auf eine Windows Maschine. Damit das klappt, muss man auf den Verzeichnissen zuvor noch die richtigen Permissions setzten.
Nach dem Kopieren der things, items, etc… files auf das openhab3_conf/_data volume und das Kreieren eines neuen Workspaces im Visual Studio Code und einem neuen deploy des containers, ist openhab doch tatsächlich wieder gelaufen.
Was hat sich geändert?
openhab läuft nicht mehr als Dienst im Container, d.h. die Kontrolle über systemctl start|stop|status, etc. funktioniert nicht mehr. Will/muss man den OH Dienst neu starten, muss man den ganzen Container neu starten.