NEWS
ioBroker mit Docker auf QNAP251+ mit Network host
-
Bevor ich meine Frage formuliere (ob ich die richtig stelle weiß ich auch noch nicht) erst mal meine Konfiguration.
Ich habe eine QNAP TS251+ (Intel Celeron J1900 Quad-Core 2,0 GHz Prozessor) mit 16GB Ram aufgerüstet. Die erste Netzwerkschnittstelle Adapter 1 bekommt von der FritzBox per DHCP immer die gleiche IP (sowie Gateway und DNS).
Der Adapter 2 ist mit einer festen IP in einem anderen Subnet, meinem Intranet, eingestellt.
Im Intranet laufen meine Desktop-Rechner hinter einen WindowsRechner mit dem Jana-Proxy,
der auch meine Mailpostfächer aufsammelt, sowie einem DLNA Server. Außerdem sind im Intranet die Controller meiner Heimautomatisierung (ModBus und MQTT).
Im Fritzbox-Netzwerk (incl. WLAN) laufen Fernseher, Tablett, Alexa, Handy u.a..
Deshalb möchte ich gerne die ioBroker unter Docker mit der Option –network host installieren, um
Daten aus beiden Netzwerken verarbeiten zu können. Beim Portainer hat das prima geklappt.
Über die Konsole rufe ich diesen Befehl auf: (ich gehe mit Putty auf die QNAP, Benutzer admin)
docker run -d --name ioBroker --network host --restart always -e TZ="Europe/Berlin" -p 8081:8081 -p 8082:8082 -p 8083:8083 -p 8084:8084 -v /share/Container/Docker/ioBroker:/opt/iobroker -v /share/Container/Docker/ioBroker_transfer:/opt/transfer -v /share/Container/Backup/Docker/ioBroker:/opt/iobroker/backups buanet/iobroker
Es läuft aber nicht durch, das ist die Ausgabe auf der Container-Station (unnötiges entfernt):
,--------------- 2019-12-16 15:51:00 ---------------
,----- Welcome to your ioBroker-container! -----
,----- Startupscript is now running. -----
,----- Please be patient! -----
,----- Debugging information -----
,----- System -----
,----- arch: x86_64 -----
,----- Versions -----
,----- image: v4.0.0 -----
,----- node: v10.17.0 -----
,----- npm: 6.11.3 -----
,----- ENV -----
,----- AVAHI: false -----
,----- PACKAGES: nano -----
,----- SETGID: 1000 -----
,----- SETUID: 1000 -----
,----- Step 1 of 5: Installing additional packages -----
,The following packages will be installed: nano...
,Done.
,----- Step 2 of 5: Detecting ioBroker installation -----
,Installation of ioBroker detected in /opt/iobroker.
,----- Step 3 of 5: Checking ioBroker installation -----
,This is the first run of a new container. Time for some preparation.
,Changing UID to 1000 and GID to 1000...
,usermod: Keine Änderungen
,Done.
,(Re)Setting folder permissions (This might take a while! Please be patient!)...
,Done.
,Fixing "sudo-bug" by replacing sudo with gosu...
,Done.
,Looks like this is a new and empty installation of ioBroker.
,Hostname needs to be updated to QNAP251plus...
,The host for instance "system.adapter.admin.0" was changed from "8406289da871" to "QNAP251plus".
,The host for instance "system.adapter.discovery.0" was changed from "8406289da871" to "QNAP251plus".
,The host for instance "system.adapter.info.0" was changed from "8406289da871" to "QNAP251plus".
,Done.
,----- Step 4 of 5: Applying special settings -----
,Some adapters have special requirements which can be activated by the use of environment variables.
,For more information take a look at readme.md
,----- Step 5 of 5: ioBroker startup -----
,Starting ioBroker...
,host.QNAP251plus check instance "system.adapter.admin.0" for host "QNAP251plus"
,host.QNAP251plus check instance "system.adapter.discovery.0" for host "QNAP251plus"
,host.QNAP251plus check instance "system.adapter.info.0" for host "QNAP251plus"
,Send diag info: {"uuid":"7abd3182-d399-f7bd-da19-9550d8babede","language":"","country":"","hosts":[{"version":"2.1.1","platform":"Javascript/Node.js","type":"linux"}],"node":"v10.17.0","arch":"x64","adapters":{"admin":{"version":"3.6.12","platform":"Javascript/Node.js"},"discovery":{"version":"1.3.0","platform":"Javascript/Node.js"},"info":{"version":"1.5.6","platform":"Javascript/Node.js"}},"statesType":"file","objectsType":"file","model":"Intel(R) Celeron(R) CPU J1900 @ 1.99GHz","cpus":4,"mem":16679399424,"ostype":"Linux","city":""}
,================================== > LOG REDIRECT system.adapter.admin.0 => false [Process stopped]
,================================== > LOG REDIRECT system.adapter.admin.0 => false [system.adapter.admin.0.logging]
,================================== > LOG REDIRECT system.adapter.admin.0 => false [Process stopped]
,================================== > LOG REDIRECT system.adapter.admin.0 => false [system.adapter.admin.0.logging]
Die beiden letzten Ausgaben wiederholen sich dann endlos.
Die Verzeichnisse werden erstellt, allerdings bleiben alle leer.
Manchmal bekomme auch diese Ausgabe nach/bei Schritt 2, dann beginnt es von vorne:
There is data detected in /opt/iobroker, but it looks like it is no instance of iobroker!,
Please check/ recreate mounted folder/ volume and restart ioBroker container.,
Das ganze habe ich mehrfach probiert, auch Container und Images gelöscht sowie die Verzeichnisse.
Verschiede Verzeichniss-Pfade habe ich auch probiert.
Ich habe mir jetzt überlegt, dass ich zwei Bridge Netzwerke anlegen, den Aufruf mit dem ersten Netzwerk mache und das zweite anhänge. Bevor ich jedoch damit anfange, hoffe ich auch Eure Tipps, damit ich nicht in die falsche Richtung laufe. Mit den Netzwerken unter QNAP und Docker steige ich noch nicht so ganz durch. Ich kann in der QNAP Virtuelle Switche anlegen, würde also je Subnet einen anlegen, entsprechend den beiden bridge Netzwerken. Wenn ich unter Docker ein Netzwerk create, erscheint das übrigens auch dort. Dann gibt es neben den Standard Netzwerken unter Docker noch das/den Treiber qnet. Ich bin etwas verwirrt.
Was ich später noch vorhabe, wenn der ioBroker läuft (auch hier sind Tipps erwünscht):
Irgendwann soll der ioBroker auf ein embedded Edge Device umziehen. Da soll dann auch mein Pi-Hole laufen (derzeit auf einem rpi an der Fritzbox). Dann soll noch ein Mailserver und ein Proxy dazukommen, damit der Windows-Server weg kann.
Die Qnap wird dann nur noch das Datengrab mit dem Multimedia DLNA Kram.
Außerdem soll sich dann die QNAP mit einer weiteren, örtlich getrennten, QNAP synchronisieren.
ioBroker hatte ich mit Network Bridge auch schon lokal am laufen, außerdem auch mal auf einem rpi und in einer Ubuntu VM. Allerdings ohne Docker. Auch beruflich habe ich ein wenig mit docker, MQTT usw. zu tun, aber nur oberflächlich
Ich würde mich gerne weiter einarbeiten, habe aber nicht die Zeit alles auszuprobieren. Wenn Ihr mich also in die richtige Richtung stupsen könntet wäre das prima, vielen Dank! -
Ich habe über die Feiertage Zeit gehabt und eine Lösung gefunden:
Voraussetzungen:
QNAP 251+ mit 16GB Ram, QTS v4.4.1.1146, Docker v17.09.1, Adapter 1 mit DHCP an FritzBox, Adapter 2 mit fixer IP am Intranet
Zunächst alle Reste der vorherigen Versuche entfernen, also in der ContainerStation die Container stoppen, löschen und die Images entfernen. Zur Sicherheit noch in der Kommandozeile „docker system prune“ ausführen, das entfernt alle inaktiven Container und Netzwerke. Mit der FileStation die angelegten Verzeichnisse löschen. Jetzt müsste alles blank sein.Ich benutze gerne die Kommandozeile, um Docker Kommandos auszuführen. Das ist für mich übersichtlicher beim Probieren/Dokumentieren. Trotzdem installiere ich auch immer den Portainer, weil man da bequem alles anschauen kann, ähnlich wie auch in der ContainerStation.
Ich wollte den ioBroker über beide Netzwerke erreichen bzw. aus beiden Informationen lesen. Da dies mit dem Aufruf „--network host“, im Gegensatz zum Portainer s.u., nicht klappt (ioBroker wird nicht richtig installiert, warum auch immer), habe ich einen anderen Weg gefunden.
Ich lege zunächst im Docker 2 Netzwerke an, dazu benutze ich den QNAP Treiber qnet, siehe: https://qnap-dev.github.io/container-station-api/qnet.html#Netzwerke anlegen:
docker network create -d qnet --ipam-driver=qnet --ipam-opt=iface=eth0 dhcp-fritzboxErzeugt ein Netzwerk Typ qnet mit dem QNAP Treiber qnet und dem Namen dhcp-fritzbox (am QNAP Adapter1 = FritzBox). Dadurch wird in der QNAP automatisch auch ein virtueller Switch erzeugt.
docker network create -d qnet --ipam-driver=qnet --ipam-opt=iface=eth1 --subnet=192.168.1.0/24 --gateway=192.168.1.1 static-intranet
Erzeugt ein Netzwerk Typ qnet mit dem QNAP Treiber qnet und dem Namen static-intranet (am QNAP Adapter2 = Intranet)
Option -d steht hier nicht wie beim run Befehl für detach sondern für --driver, also hier der qnet Treiber (alternativ z.B. auch bridge, macvlan u.a.).
Option --ipam-driver weist den IP adress manager zu, hier auch vom qnet.
Option --ipam-opt weist spezielle Treiber Parameter zu, hier soll das Interface eth0 benutzt werden (entspricht dem QNAP Adapter1, der ja auf DHCP steht).
Option --subnet weist die Subnet-Maske zu 192.168.1.0/24 bedeutet IP Range von 192.168.1.1 bis 192.168.1.254, Maske 255.255.255.0
Option--gateway weist das Gateway zu
Am Ende steht der Name des NetzwerksIn der QNAP Systemsteuerung, Netzwerk- und virtueller Switch, Übersicht sieht das dann so aus (Namen der virtuellen Switche angepasst, WAN-IP entfernt):
Im Portainer später dann so (Ownership ist mir noch unklar):
Portainer installieren:
docker pull portainer/portainer (holt das Portainer Image vom DockerHub, ist aber nicht unbedingt nötig, der docker run würde es auch holen, wenn noch nicht lokal vorhanden)docker run -d -p 9999:9000 --name portainer --network host -v /var/run/docker.sock:/var/run/docker.sock -v /share/Container/Docker/portainer_data:/data portainer/portainer
Obwohl der Port 9999 benutzt werden soll, ist der Portainer nur unter Port 9000 ereichbar (liegt ev. am network host ?),
kann aber wegen network host sowohl über http://192.168.178.151:9000 wie auch http://192.168.1.151:9000 aufgerufen werden.ioBroker installieren:
docker pull buanet/iobrokerdocker run -d --name ioBroker --network dhcp-fritzbox --restart always -e TZ="Europe/Berlin" -p 8081:8081 -p 8082:8082 -p 8083:8083 -p 8084:8084 -v /share/Container/Docker/ioBroker:/opt/iobroker -v /share/Container/Docker/ioBroker_transfer:/opt/transfer -v /share/Container/Backup/Docker/ioBroker:/opt/iobroker/backups buanet/iobroker
Container stoppen, das zweite Netzwerk anhängen mit einer IP, den ioBroker Container neu starten.
docker network connect --ip 192.168.1.152 static-intranet ioBroker
Man könnte wohl auch den Container erst mit create anlegen und später starten (docker start -d ioBroker)
docker create --name ioBroker --network dhcp-fritzbox --restart always -e TZ="Europe/Berlin" -p 8081:8081 -p 8082:8082 -p 8083:8083 -p 8084:8084 -v /share/Container/Docker/ioBroker:/opt/iobroker -v /share/Container/Docker/ioBroker_transfer:/opt/transfer -v /share/Container/Backup/Docker/ioBroker:/opt/iobroker/backups buanet/iobrokerIn der QNAP Systemsteuerung, Netzwerk- und virtueller Switch, Übersicht sieht das dann so aus (Namen der virtuellen Switche angepasst, WAN-IP entfernt):
ioBroker kann jetzt sowohl mit dem FritzBox Subnet als auch mit dem Intranet Subnet kommunizieren.
Das funktioniert soweit erst mal für mich und ich kann weiter probieren.
Vielleicht habt Ihr ja trotzdem noch weitere Tipps.
Und noch ein frohes, neues Jahr an alle!