Openhab Einstellungen aus Docker sichern

Status
Für weitere Antworten geschlossen.

apachelance

Benutzer
Mitglied seit
21. Sep 2013
Beiträge
299
Punkte für Reaktionen
0
Punkte
22
Ich nutze seit kurzem Openhab auf meiner DS1815+. Dazu habe ich Docker installiert und dieses Paket aus dem Directory installiert: https://hub.docker.com/r/openhab/openhab/

Wichtig ist mir, dass Einstellungen erhalten bleiben, wenn ich den Container update/neu aufsetze. Dazu habe ich Pfade in der Filestation angelegt:

file.JPG

Diese Pfade habe ich im Docker unter Volumes zugewiesen, wie es hier https://hub.docker.com/r/openhab/openhab/ beschrieben ist. Aber die Verzeichnisse bleiben leer. Kann jemand weiterhelfen?

volume.JPG
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.475
Punkte für Reaktionen
358
Punkte
103
https://hub.docker.com/r/openhab/openhab/ schrieb:
docker run --rm \
--user 9001
-v /opt/openhab/addons:/openhab/addons \
-v /opt/openhab/conf:/openhab/conf \
-v /opt/openhab/userdata:/openhab/userdata \
openhab/openhab:2.0.0-amd64 '

Irgendwie passen die Volume-Angaben auf der Dockerhub-Seite nicht zu deinen Mount-Pfaden.

Die Volume-Angaben sind folgend zu verwenden:
-v {Datei/Ordner}:{Mount-Pfad}

Linke Seite: relativer Pfad auf DS ohne /volumeX - diese Verzeichnis wird in den Container gemapped
Rechte Seite: absoluter Pfad in Container - dieser MUSS unverändert aus der Beschreibung übernommen werden, hier wird das Verzeichnis von der linken Seite reingemapped

Falls die linke Seite ein Mount-Point (bspw. für Netwerzklaufwerke, Mount-Bind), dann MUSS dieser vor Start des Docker-Containers gemountet sein.
Wenn die linke Seite erst im nachhinein gemoutet wird, dann bleibt das Verzeichnis im Container leer!

Danach beim erste Start des container unter Details ein Terminal aufmachen und folgendes eingeben:
Code:
  sh -c 'cp -av /openhab/userdata.dist/* /openhab/userdata/ &&  cp -av /openhab/conf.dist/* /openhab/conf/'

Damit kopierst Du die Konfiguration erst in das gemappte Verzeichnis.

Danach folgend starten.
sudo docker run \
--user 9001 \
--name openhab \
--net=host \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /opt/openhab/addons:/openhab/addons \
-v /opt/openhab/conf:/openhab/conf \
-v /opt/openhab/userdata:/openhab/userdata \
openhab/openhab:2.0.0-amd64

Achtung: wenn Du den Container über die Shell startest, müssen links absolute Namen verwendet werden!
Sprich nicht /docker/opt/openhab sondern /volume1/docker/opt/openhab (oder auf welche Volume Du auch immer Docker installiert hast)
 
Zuletzt bearbeitet:

apachelance

Benutzer
Mitglied seit
21. Sep 2013
Beiträge
299
Punkte für Reaktionen
0
Punkte
22
Ok, danke. Ist doch noch einiges handisch zu machen. Werd ich mir mal anschauen.
 

iLion

Benutzer
Mitglied seit
07. Okt 2008
Beiträge
355
Punkte für Reaktionen
4
Punkte
18
Du musst nichts händisch machen. Deine Pfade stimmen nur nicht. Siehe auch Info auf der Docker Webseite:

Rich (BBCode):
docker run \
        --name openhab \
        --net=host \
        -v /etc/localtime:/etc/localtime:ro \
        -v /etc/timezone:/etc/timezone:ro \
        -v openhab_addons:/openhab/addons \
        -v openhab_conf:/openhab/conf \
        -v openhab_userdata:/openhab/userdata \
        -d \
        --restart=always \
        openhab/openhab:2.0.0-amd64

Bei mir sieht das so aus, und die Verzeichnisse füllen sich:

docker_setup.jpg
 

apachelance

Benutzer
Mitglied seit
21. Sep 2013
Beiträge
299
Punkte für Reaktionen
0
Punkte
22
Klappt bei mir leider nicht. Wenn ich den Container mit den Pfaden anlege, kommt beim ersten Start sofort "Docker Container openhab unexpected stopped"

Ich gebe die Pfade, wie bei dir an:

2.JPG

Am Ende siehts dann so aus:

1.JPG

Das steht im Container-Protokoll

3.JPG
 
Zuletzt bearbeitet:

iLion

Benutzer
Mitglied seit
07. Okt 2008
Beiträge
355
Punkte für Reaktionen
4
Punkte
18
Hast Du den alten Container vorher gelöscht? Hatte auch erst den /opt Pfad drin. Dann habe ich das ganze noch mal frisch gemacht mit den oben genannten Pfaden und dann klappte es direkt. Habe allerdings auch den 2.0 und nicht 2.1 in Verwendung.
 

apachelance

Benutzer
Mitglied seit
21. Sep 2013
Beiträge
299
Punkte für Reaktionen
0
Punkte
22
Alter Container ist gelöscht. Passiert trotzdem. Muss ich vielleicht vorher die Config und Userdata aus dem Container in die DSM-Verzeichnisse kopieren, wie haydibe geschrieben hat?
 

iLion

Benutzer
Mitglied seit
07. Okt 2008
Beiträge
355
Punkte für Reaktionen
4
Punkte
18
Meine Reihenfolge war:

  1. Unter Registrierung das Abbild "openhab/openhab:2.0.0-amd64" laden
  2. Einen neuen Container aus dem Abbild erstellen
  3. Die Verzeichnisse wie oben gezeigt konfigurieren

Die Verzeichnisse in docker/openhab waren zuvor alle leer und fühlen sich direkt beim ersten Start. Wenn Du keine wichtige Konfiguration hast, dann vielleicht Container und Abbild löschen und noch mal ganz von vorne anfangen.
 

apachelance

Benutzer
Mitglied seit
21. Sep 2013
Beiträge
299
Punkte für Reaktionen
0
Punkte
22
Alles sehr seltsam. Hab jetzt auch den openhab2.0-amd64 geladen. Dann Abbild erzeugt mit den selben Netzwerkeinstellungen wie Docker Host. Wenn ich nur das Conf verzeichnis mappe startet der Container (Verzeichnis bleibt aber leer). Wenn ich Userdata auch mappe, startet der Container nicht und es kommt wieder die Fehlermeldung.

Die zu mappenden Ordner habe ich mit der Filestation ganz normal unter dem Docker Verzeichnis angelegt.
 

iLion

Benutzer
Mitglied seit
07. Okt 2008
Beiträge
355
Punkte für Reaktionen
4
Punkte
18
Vielleicht sind Deine Rechte falsch? Ich habe meine Ordner als Administrator erstellt. Das Dockerverzeichnis wird ja mit der Installation erstellt. Übertrage doch mal die Rechte von der Docker-Freigabe auf die Unterverzeichnisse.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.475
Punkte für Reaktionen
358
Punkte
103
Du kannst die UserId übergen:
-e USER_ID=1026

Einfach im Reiter Umwelt die Variabe USER_ID mit der UserId deines Ziel-Users verwenden.
Kannst du auf der Shell über 'id {username}' rausbekommen.

Das mit der Konfigurationskopie habe ich von der Dockerhub-Seite übernommen - so werden bei mir die Daten in die Verzeichnisse kopiert.
Allerdings habe ich es NIE geschafft den Container zu laufen zu bekommen. Der Prozess startet und will Artefakte von Maven herunterladen - nur tut sich da nie etwas.

In DSM6 gibt es /etc/localtime, aber kein /etc/timezone. Letzteres kann man aber easy umgehen: leg dir in /volume1/docker/openhab die Textdatei timezone mit folgendem Inhalt an; "Europe/Berlin" (ohne die "-Zeichen") und map das file /docker/openhab/timezone in den Container /etc/timzone. um localtime zu bekommen habe ich einen Symlink auf locatime angelegt: 'ln -s /etc/localtime /volume1/docker/openhab/localtime' und dann gegen /etc/localtime im Container gemapped.
 

apachelance

Benutzer
Mitglied seit
21. Sep 2013
Beiträge
299
Punkte für Reaktionen
0
Punkte
22
Kannst du mir mal einen Screenshot deiner Rechte für den openhab Ordner zeigen? Ich hab die vom Docker Ordner vererbt, hat aber nichts gebracht.

Dann hab ich mal im Userdata-Verzeichnis einen etc Ordner erstellt, da dies ja in der Karafa Meldung im Protokol als Fehler kam. Daraufhin kommen jetzt diese Fehler

4.JPG

Sieht nach einem Rechteproblem aus.
 

iLion

Benutzer
Mitglied seit
07. Okt 2008
Beiträge
355
Punkte für Reaktionen
4
Punkte
18
Mein docker Ordner sieht so aus:

docker_ordner.png

Die Rechte vom untergeordneten openhab Ordner sehen so aus:

openhab_ordner_1.png

und

openhab_ordner_2.png

Nach dem Start hat openhab dann z.B. die folgenden Ordner im conf-Verzeichnis angelegt:

docker_conf.jpg
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.475
Punkte für Reaktionen
358
Punkte
103
Wenn man die Umwelt-Variable USER_ID nicht selber setzt, hat sie bei disesm Image den Wert 9001! Das Docker-Verzeichnis gehört aber nicht dem User mit der ID 9001.

Da gibt es zwei Möglichkeiten:
1. Den Owner des Verzeichnisses /volume1/docker/openhab auf user id 9001 ändern -> chown 9001:100 -R /volume2/docker/openhab
2. Die Variable USER_ID in der Docker UI auf euren Benutzer setzen und danach das Verzeichnis demselben user zuordnen:
chown ${id -u}:${id -g} -R /volume2/docker/openhab # macht den gerade eingeloggten user zum Besitzer! (sprich: nicht als root user).

Möglichkeit 2 ist dabei der richtige Ansatz.
 

apachelance

Benutzer
Mitglied seit
21. Sep 2013
Beiträge
299
Punkte für Reaktionen
0
Punkte
22
Wenn man die Umwelt-Variable USER_ID nicht selber setzt, hat sie bei disesm Image den Wert 9001! Das Docker-Verzeichnis gehört aber nicht dem User mit der ID 9001.

Da gibt es zwei Möglichkeiten:
1. Den Owner des Verzeichnisses /volume1/docker/openhab auf user id 9001 ändern -> chown 9001:100 -R /volume2/docker/openhab
2. Die Variable USER_ID in der Docker UI auf euren Benutzer setzen und danach das Verzeichnis demselben user zuordnen:
chown ${id -u}:${id -g} -R /volume2/docker/openhab # macht den gerade eingeloggten user zum Besitzer! (sprich: nicht als root user).

Möglichkeit 2 ist dabei der richtige Ansatz.

Bei Variante 2:
Ich bin der Besitzer, siehe Screenshot. Also müsste ich nur im Docker UI zum Reiter Umwelt gehen und dort die Variable USER_ID mit dem Wert apachelance eintragen?

5.JPG
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.475
Punkte für Reaktionen
358
Punkte
103
Neben dem Rechteproblem gibt es wohl noch weiteres:

root@dsm:~# docker run \
> --user 1026 \
> --name openhab \
> --net=host \
> -e USER_ID=1026 \
> -v /volume2/docker/openhab/addons:/openhab/addons \
> -v /volume2/docker/openhab/conf:/openhab/conf \
> -v /volume2/docker/openhab/userdata:/openhab/userdata \
> openhab/openhab:2.1.0-snapshot-amd64
Unable to find image 'openhab/openhab:2.1.0-snapshot-amd64' locally
2.1.0-snapshot-amd64: Pulling from openhab/openhab
83714cdcc528: Pull complete
91378372dca9: Pull complete
fa984495abc8: Pull complete
a3328785d149: Pull complete
c123ca1aa7ab: Pull complete
fced1e208690: Pull complete
Digest: sha256:0b40bff080c0955d31e6927fa1627a10650d757daa32c4309d7f2bc7c4a49442
Status: Downloaded newer image for openhab/openhab:2.1.0-snapshot-amd64
Launching the openHAB runtime...
karaf: KARAF_ETC is not valid: /openhab/userdata/etc

Der Fehler tritt nicht mehr auf, wenn man auf der Shell folgendes eingibt:
Code:
echo "Europe/Berlin" > /volume2/docker/openhab/timezone

root@dsm6:/volume2/docker/kopfpilot/openhab# docker run \
> --user 1026 \
> --name openhab \
> --net=host \
> -e USER_ID=1026 \
> -v /volume2/docker/openhab/timezone:/etc/timezone \
> -v /volume2/docker/openhab/addons:/openhab/addons \
> -v /volume2/docker/openhab/conf:/openhab/conf \
> -v /volume2/docker/openhab/userdata:/openhab/userdata \
> openhab/openhab:2.1.0-snapshot-amd64
Launching the openHAB runtime...
Unable to update instance pid: Unable to create directory /openhab/runtime/instances

__ _____ ____
____ ____ ___ ____ / / / / | / __ )
/ __ \/ __ \/ _ \/ __ \/ /_/ / /| | / __ |
/ /_/ / /_/ / __/ / / / __ / ___ |/ /_/ /
\____/ .___/\___/_/ /_/_/ /_/_/ |_/_____/
/_/ 2.0.0
Release Build

Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown openHAB.

Laufen tut es trotzdem nicht.
 
Zuletzt bearbeitet:

apachelance

Benutzer
Mitglied seit
21. Sep 2013
Beiträge
299
Punkte für Reaktionen
0
Punkte
22
Hab jetzt die USER_ID rausgefunden und in der Docker UI eingetragen. Der Container lässt trotzdem nicht starten und es kommen die gleichen Fehler mit Permission denied auf den gemounteten Verzeichnissen. Das ist schon ziemlich nervig, zumal der Openhab Container ja ohne gemountete Verzeichnisse läuft. Ich will halt nur meine Einstellungen außerhalb sichern.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.475
Punkte für Reaktionen
358
Punkte
103
Der Container läuft bei dir ohne gemountete Verzeichnisse? Wie lange hast Du gewartet zwischen Container start und Zugriff auf die UI? Bei mir tut sich da auch noch 10 Minuten nichts ...

Bei mir läuft er in egal welcher Konstellation nicht - er beschwert sich zwar das die pid nicht geschrieben werden kann, aber der Java-Prozess läuft munter vor sich hin. Das mit der PID ist auch irrelavant, da der Container eh gekillt wird, wenn der Prozess nicht mehr läuft.

In /openhab/userdata/tmp (bzw in dem gemappten DS-Verezeichnis) werden munter Verzeichnisse nach dem Muster fileinstall-8831520886618866087 angelegt, da ist aber nie etwas drin.


Zu Deinem Permission problem: bitte auf der shell mal folgendes eingeben und dann hier posten
Code:
id {username}
ls -l /volume2/docker/openhab
 

apachelance

Benutzer
Mitglied seit
21. Sep 2013
Beiträge
299
Punkte für Reaktionen
0
Punkte
22
Ja, der Container ohne irgendwelche Mounts läuft problemlos. UI Zugriff dauert knapp 30sek - 1min.

Hier der Output:
uid=1029(apachelance) gid=100(users) groups=100(users),101(administrators)
drwxrwxrwx+ 3 apachelance users 4096 Feb 5 12:13 userdata
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat