NEWS
[HowTo] ioBroker unter Docker auf Synology DiskStation
-
Hallo André,
die neue Version startet jetzt bei mir einwandfrei. Portainer auf der DS nutze ich im Grunde nur als Informationsquelle, weil doch erheblich mehr Informationen als auf der Docker-Oberfläche angezeigt werden. Auch die Terminal-Implementierung finde ich wesentlich gelungener.
VG
Michael `
Hab mir Portainer mal angeschaut. Schon ziemlich cool. Bin gerade dabei zu experimentieren. Da ist ne ganze Menge möglich. Ne Menge Potential für zukünftige Tuts…
MfG,
André
-
Hallo zusammen,
zuerst einmal ein riesen Dankeschön für das tolle Docker-Image an andre.
Da ich aber mehrere Male am Verzweifeln war, möchte ich hier meinen Weg, bzw. die Probleme und die entsprechende Lösung dazu kurz dokumentieren.
Vorab:
Ich bin von einem MULTIHOST (wird noch wichtig) System eines Raspberry-Pis umgezogen auf den Docker-Container. Das ganze mittels docker-compose, um auch redis im Container laufen zu lassen und vor allem um eine eigene IP-Adresse für ioBroker zu erhalten und mir das mappen der Ports zu sparen.
Obwohl ich mich genau an die Anleitung gehalten hatte, wollte mein admin und alle weiteren Adapter nicht starten. Die Installation des Containers gelang einwandfrei und startete auch die Blanko-Installation des ioBrokers.
Mein erstes Problem war, wie bereits weiter vorne schon aufgetaucht, dass der Befehl
tar -xf iobroker_verzeichnis.tar
das Backup-Archiv in den aktuellen Ordner entpackte. Also /opt/transfer/opt/iobroker/. Das war jedoch schnell mit einer kleinen Ergänzung erledigt:
tar -xf iobroker_verzeichnis.tar -C /
Dadurch wird das Entpacken vom root-Verzeichnis aus gestartet. Also richtiger Weise /opt/iobroker/. Hier kann von Anfang an ein leeres Verzeichnis gemappt werden, das Entpacken des Backup-Archivs dort hinein reichte bei mir aus.
Nächstes Problem war der fehlende Redis-Server, diesen habe ich dann mittels Docker-Container hinzugefügt (automatisiert mit docker-compose) und den Listen-Port ergänzt. Somit war auch die Meldung, No connection to states 127.0.0.1:6379[redis] erledigt
Das abschließende und wohl ärgerlichste Problem war, dass der admin und alle weiteren Adapter nicht gestartet waren, der js-controller lief jedoch an. Problem war die Änderung des Hostnames.
Was ich nämlich evtl. missverstanden hatte war, dass bei
iobroker host ALTERHostname ````der ALTE Hostnamen stehen muss. Dadurch werden alle Instanzen auf den NEUEN Hostnamen umgeschlüsselt und iobroker startet ohne Probleme. Alternativer Befehl für einen Singlehost wäre auch
iobroker host this
Ich hoffe das hilft dem ein oder anderen weiter. Falls jemanden meine Vorgehensweise mit docker-compose interessiert, kann ich das gerne nachreichen. Dadurch erhält man für den ioBroker wie bereits erwähnt eine eigene IP-Adresse (macvlan), der Redis-Server wird im eigenen Container installiert und natürlich die nötigen Laufwerke gemountet und der Hostnamen definiert. Danach muss nur noch ein Befehl in der Konsole zum erstmaligen Start eingeben werden. `
Hallo Michael,
danke dass du deine Erfahrungen mit uns teilst! Das tar-Thema habe ich im Tutorial bereits überarbeitet. Ich glaube dass es da viel Verwirrung mit dem Parameter -P gab… Könntest du mal schauen ob das jetzt so wie beschrieben geht?
Was redis angeht, das habe ich so gelöst: https://buanet.de/2018/08/mehr-performa … states-db/
Weiß nicht ob du das schon gelesen hast. Ich werde das Tutorial auch bald um "Redis unter Docker" erweitern…
Bei dem Thema Hostname bin ich auch noch nicht ganz schlau geworden. "iobroker host this" funktioniert auf jeden Fall im "Single-Mode". Mein Multihost habe ich erst danach angebunden... Daher habe ich hier keine eigenen Erfahrungen. Überlege gerade wie ich das im Tutorial mit unterbringen kann...
Zu dem ganzen "macvlan"-Thema (eigene IP-Adresse für ioBroker) habe ich mich ja bisher glaub ich noch gar nicht geäußert. Aber für mich ist das ehrlich gesagt irgendwie überflüssig und entspricht nicht dem Gedanken einer Containervirtualisierung. Ich sehe da einfach den Vorteil nicht. Das Einzige was ich da sehe ist das Festhalten an den guten alten Virtualisierungspraktiken wie sie und seit Jahren von vmware, microsoft & co vorgelebt werden. Ein Container ist keine VM. Aber das ist ein anderes Thema. Ich hoffe ich trete damit jetzt nicht eine Offtopic Diskussion los.
Wie auch immer. Danke für das Teilen deiner Erfahrungen! Ich denke das wird definitiv dem Ein oder Anderen helfen.
MfG,
André
-
Hallo zusammen,
leider bin ich über die Suche nicht fündig geworden.
Ich habe eine DS416play und würde mich freuen wenn sich jemand findet, der auf diesem Modell auch erfolgreich über Docker den IOBroker installiert und erfolgreich Adapter zum laufen bekommen hat.
Ich kann zwar io borker installieren aber die Adepter laufen nicht. Z.B Flot macht probleme. Keine Datenpunkte zur Asuwertung und sieht auch in der Adpteransicht seltsam aus.
Danke vorab für eine Rückmeldung. `
Kannst du genauer werden? Ich befürchte fast dass das nichts mit der Tatsache zu tun hat, dass ioBroker unter Docker läuft.
MfG,
André
-
Moin Moin alle zusammen,
> Kleiner Tipp, zum Umzug node6 auf node8 gibt's im Tutorial und auch in der offiziellen Doku einen Hinweis. Stichwort reinstall.sh. Hat bei mir aber auch erst im zweiten Anlauf geklappt…
Der Link zu den Infos in deiner Anleitung geht nicht mehr.
Kannst du für die Angsthasen unter uns eine Anleitung schreiben, wie man einen 2ten docker container laufen lassen kann zum testen?
Ich denke wenn man als Abbild vor langer Zeit die latest geladen hat also bei Abbild steht buanet/iobroker:latest
und man wieder die latest unter registrierung lädt, wird das alte abbild überschrieben?
also muss man beim download am besten die version 2.0.0 direkt auswählen?
> Dann einfach den ioBroker-Ordner auf der DS klonen und in den neuen Container vom neuen Image einhängen
Wie mache ich das klonen?
wenn ich einfach nur über DSM den ordner kopiere, entsteht doch meta daten salat? rechte passen nicht mehr usw.
kann ich den 2 docker container auch iobroker nennen?
wenn nicht, was muss ich beachten ? `
Hallo,
stimmt, da hat sich wohl was geändert… Schau mal hier: http://www.iobroker.net/docu/?page_id=8323&lang=de
Eine Anleitung zum zweiten ioBroker werde ich nicht schreiben. Das sollte jeder hin bekommen. Es geht wirklich nur darum den Ordner zu duplizieren (z.B. ober Kommandozeile oder winscp).
Was das Image angeht. Solange ein Container aus dem Image läuft (bei dir "latest") wirst du das Image sowieso nicht löschen/ ersetzen können. Das heißt du müsstest so oder so über das 2.0.0 Image gehen (sofern du nicht mutig genug bist ;).
Meine Empfehlung: Containereinstellungen exportieren, Container löschen, Neues Image (2.0.0) laden, neuen Container aus neuem Image mit Mount auf kopiertes Verzeichnis erstellen, testen. Für den Fall dass es nicht funktioniert: Neuen Container löschen, Sicherung wieder importieren. fertig.
Zwei Container mit gleichem Namen geht glaub ich nicht.
Wenn der Container im 2.0.0 Image mit dem kopierten Ordner funktioniert, dann einfach latest-Image löschen und neu laden. iobroker Container mit gemountetem kopierten Verzeichnis löschen. Original-Verzeichnis umbenennen (z.B. _bak), kopiertes Verzeichnis auf "normalen" Namen umbenennen und anschließend den ganz am Anfang exportierten Container importieren (sollte dann aus dem neuen latest-Image und dem neuen Ordner erstellte werden.
…jetzt hab ich doch eine Anleitung geschrieben.
Viel Erfolg!
Mfg;
André
-
Hallo André,
ich werde mein Vorgehen gerne nachreichen, habe momentan nur noch ein Problem mit dem Multihostbetrieb. Ich kann die Anbindung eines Raspberry Pis nicht auf den Docker umziehen. Sobald das Problem behoben ist, melde ich mich.
Ich sehe das auch so, dass es nicht dem Dockerprinzip entspricht, aber ich habe zu viele Portüberlagerungen mit der DS, daher eigene IP mit Standardports.
-
*** Update ***
Die Lösung gibt es hier: http://www.iobroker.net/docu/?page_id=8 … ion_Nodejs unter dem Punkt "Upgrade von nodejs und npm".
cd /opt/iobroker mv reinstall.sh reinstall.dos tr -d '\r' < reinstall.dos > reinstall.sh chmod +x reinstall.sh
Dann funktioniert es auch mit dem ./reinstall.sh `
In meinem Setup (docker unter Qnap) hatte ich selbige Situation, die Lösung war auch die obige Prozedur -
Ich kämpfe immer noch mit meinen Container iobroker_test.
Wie bringe ich diesen Container in den host-Mode. Damit ich die Ports nicht umleiten muss. Die beiden Container sollen nicht parallel laufen.
-
Vielen Dank für den Tipp mit reinstall.sh. Das hat alle Probleme gelöst.
Zwei oder mehr Container mit gleicher Basis denke ich geht nur, wenn du den Docker Befehl direkt oder mit docker-Compose ausführst.
Ich hoffe, dass ich heute noch dazu komme dazu was zu schreiben.
Aber wie schon von André geschrieben wurde, kannst du ja einfach den ioBroker Ordner in einen neuen Version 2.0 Container einbinden. Falls es nicht klappt, einfach wieder die alte Version des Containers nehmen.
-
Ich habe auf die Schnelle mal mein Vorgehen zusammengefasst und hoffe ich habe nichts vergessen.
-
Ich habe mal eine Frage.
Wie kann ich den Adapter js2fs benutzten?
Weil ich nicht weiß wie ich mich via scp verbinden kann.
Wenn ich die Dateien nur durchreiche via Docker,
bekomme ich Rechte Probleme.
ich möchte mit atom.io arbeiten. der hat ein scp plugin.
wie sind eigentlich die Passwörter ?
komme ich überhaupt via terminal(mac) auf die instanz rauf ?
Mit freundlichen Grüßen
kevin
-
Ich habe mal eine Frage.
Wie kann ich den Adapter js2fs benutzten?
Weil ich nicht weiß wie ich mich via scp verbinden kann.
Wenn ich die Dateien nur durchreiche via Docker,
bekomme ich Rechte Probleme.
ich möchte mit atom.io arbeiten. der hat ein scp plugin.
wie sind eigentlich die Passwörter ?
komme ich überhaupt via terminal(mac) auf die instanz rauf ?
Mit freundlichen Grüßen
kevin `
Hallo Kevin,
bitte nochmal ein paar Infos zu Docker recherchieren. Ich weiß nicht wie oft ich schon darauf hingewiesen habe, dass der Container weder ein virtueller Pi noch eine virtuelle Maschine ist.
Es gibt keine Passwörter. Nein, nichtmal ein Rechte- oder gar Usermanagement… Braucht ein Container aber auch nicht...
Alle Daten die du im Container ablegtst sind schlecht. Der Container soll eine leere, austauschbare Hülle sein und bleiben. Entweder du arbeitest mit einem weiteren eingehängten Volume oder du machst es wie ich und lässt den Adapter die Scripte in einem Backup Ordner innerhalb /opt/iobroker ablegen und greifst über die DiskStation darauf zu...
MfG,
André
Gesendet von Unterwegs...
-
Ich habe mal eine Frage.
Wie kann ich den Adapter js2fs benutzten?
Weil ich nicht weiß wie ich mich via scp verbinden kann.
Wenn ich die Dateien nur durchreiche via Docker,
bekomme ich Rechte Probleme.
ich möchte mit atom.io arbeiten. der hat ein scp plugin.
wie sind eigentlich die Passwörter ?
komme ich überhaupt via terminal(mac) auf die instanz rauf ?
Mit freundlichen Grüßen
kevin `
Welche Rechte Probleme genau hast du?
Kannst du nicht read/write zusätzlich vergeben für deinen User?
Ich hab da auch etwas rumgefrickelt, aber nun geht's perfekt.
-
> Es gibt keine Passwörter. Nein, nichtmal ein Rechte- oder gar Usermanagement… Braucht ein Container aber auch nicht...
Also als ich den ordern /opt/iobroker auf die Diskstation durchgereicht habe,
und ein backup nach der Anleitung wieder eingespielt hatte,
waren von alle Dateien und Ordner deren Privilegien, Besitzer und Gruppen durcheinander.
Ist das wirklich völlig egal?
> Welche Rechte Probleme genau hast du?
Also ich habe folgendes versucht:
1. Ordner via Terminal erstellt im Container /opt/user_java_scripts
2. js2fs diesen Ordner als ziel Ordner deklariert
3. root Verzeichnis ist /opt/iobroker
4. adapter gestaret, alle scripte wurden kopiert
5. order auf der diskstation erstellt
6. ordner zur cloudstation hinzugefügt
7. container beendet
8. ordner von container /opt/user_java_scripts durchgereicht zum ordner der diskstation
9. alle datein haben die rechte root:root
10. sobald ich scripte editiere ändert sich die rechte auf kevin.
weil ich via cloudstation mit dem user kevin arbeiten muss.
alles scripte mit root:root kann ich weder sehen noch ändern.
wenn ich alle scipte mit kevin:users ändere kann ich sie zwar ändern aber der sync klappt nicht….
> Ich hab da auch etwas rumgefrickelt, aber nun geht's perfekt.
sag mir bitte wie du das gelöst hast.
-
> Es gibt keine Passwörter. Nein, nichtmal ein Rechte- oder gar Usermanagement… Braucht ein Container aber auch nicht...
Also als ich den ordern /opt/iobroker auf die Diskstation durchgereicht habe,
und ein backup nach der Anleitung wieder eingespielt hatte,
waren von alle Dateien und Ordner deren Privilegien, Besitzer und Gruppen durcheinander.
Ist das wirklich völlig egal? `
Nein, natürlich nicht völlig egal.
Docker selbst läuft immer als root. Erstellt man einen Container im Standard, läuft dieser auf dem Host auch als root und greift auch so auf Dateien auf dem Host zu. Es gibt aber eine Möglichkeit dem Container eine uid und eine gid mit zu geben. Dann würde der Container unter dem entsprechenden (Host-)User laufen. Habe ich persönlich aber noch nicht mit experimentiert und kann auch nicht sagen was das ggf für Auswirkungen auf iob hat…
MfG,
André
Gesendet von Unterwegs...
-
> Ich hab da auch etwas rumgefrickelt, aber nun geht's perfekt.
sag mir bitte wie du das gelöst hast. `
Hab gerade nachgeschaut, aktuell hab ich es gelöst mit read/write für "everyone" auf dem Ordner von js2fs.
-
@nisio:> Ich hab da auch etwas rumgefrickelt, aber nun geht's perfekt.
sag mir bitte wie du das gelöst hast. `
Hab gerade nachgeschaut, aktuell hab ich es gelöst mit read/write für "everyone" auf dem Ordner von js2fs. `
Hast du alle scripte in einem Ordner?
ich habe einige unterordner.
-
Ich habe auch Unterordner global, common, test, …
Meintest du die?
-
@nisio:Ich habe auch Unterordner global, common, test, …
Meintest du die? `
Ja genau. Das bedeutet, wenn man neue ordner erstellt, müssen die rechte angepasst werden?
Für jedes neues script müssen die rechte angepasst werden?
-
@nisio:Ich habe auch Unterordner global, common, test, …
Meintest du die? `
Ja genau. Das bedeutet, wenn man neue ordner erstellt, müssen die rechte angepasst werden?
Für jedes neues script müssen die rechte angepasst werden? `
Für neue Skripte muss ich nix anpassen, das klappt automatisch.
-
Hallo zusammen,
nach dem Update auf den container 2.0.0 habe ich ein Problem mit dem fs-Object.
Mit diesem javascript habe ich immer Bilder von der Kamera kopiert:
const fs = require('fs'); const ESKcam1URL = 'http://x.x.x.x/web/tmpfs/snap.jpg&-usr=xxx&-pwd=xxx'; const ESKcam1PIC = 'iobroker-data/files/icons-esk/ESKcam.jpg'; function AdapterESKcam() { request(ESKcam1URL).pipe(fs.createWriteStream(ESKcam1PIC)); }
Nach dem Container-Update und reinstall.sh kommt jetzt immer folgende Meldung im Log:
2018-12-24 13:59:11.428 - info: javascript.0 Start javascript script.js.esk_prod.AdapterESKcam 2018-12-24 13:59:11.432 - error: javascript.0 script.js.esk_prod.AdapterESKcam: script.js.esk_prod.AdapterESKcam:10 2018-12-24 13:59:11.432 - error: javascript.0 request(ESKcam1URL).pipe(fs.createWriteStream(ESKcam1PIC)); 2018-12-24 13:59:11.432 - error: javascript.0 ^ 2018-12-24 13:59:11.433 - error: javascript.0 TypeError: fs.createWriteStream is not a function 2018-12-24 13:59:11.433 - error: javascript.0 at AdapterESKcam (script.js.esk_prod.AdapterESKcam:10:33) 2018-12-24 13:59:11.433 - error: javascript.0 at script.js.esk_prod.AdapterESKcam:13:1 2018-12-24 13:59:11.433 - error: javascript.0 at ContextifyScript.Script.runInContext (vm.js:59:29)
Ist auch ein Issue im Github (https://github.com/ioBroker/ioBroker.ja … issues/243), aber ich denke, das hängt eher wirklich mit dem Update zusammen.
Hat irgendwer eine Idee?
Gruß, Ralf