Hallo,
ich setze mich gerade mit docker aus einander und zieh nach und anch alles in Container.
Letzte Woche dann FHEM. So weit so gut.
Seitdem FHEM im Container läuft, bekomme ich aber im Unifi-Modul keine Verbindung mehr zum Unifi-Controller (von anfang an im Container). So lange FHEM noch auf dem Host (einem anderen Host) lief, alles kein Problem.
- UC läuft ebenfalls im Container aber im network_mode = host
- FHEM läuft im eigenen Netzwerk mit entsprechendem Port-Mapping
- beide mit jeweil eigenem docker-compose erstellt.
- ping aus dem FHEM-Container zum UC (=host) funktioniert
FHEM compose
FHEM:
image: fhem/fhem-amd64_linux
container_name: FHEM
restart: always
ports:
- "8083:8083"
- "8090:8090"
- "3002:3002"
volumes:
- /share/CACHEDEV1_DATA/Docker_Daten/FHEM/fhem:/opt/fhem
environment:
FHEM_UID: 1000
FHEM_GID: 1000
TIMEOUT: 10
RESTART: 1
TZ: Europe/Berlin
MYSQL_HOST: FHEM-DB
env_file:
- /share/CACHEDEV1_DATA/Docker_Daten/FHEM/DataBase/DataBase.env
depends_on:
- FHEM-DB
- MQTT
networks:
fhem-net:
ipv4_address: 172.29.8.3
networks:
fhem-net:
external: true
unifi compose
unifi:
image: jacobalberty/unifi:stable
network_mode: host
container_name: Unifi
environment:
- TZ=Europe/Berlin
restart: always
volumes:
- /share/CACHEDEV1_DATA/Docker_Daten/Basic/unifi:/var/lib/unifi
docker network ls
NETWORK ID NAME DRIVER SCOPE
32d505e0f96b bridge bridge local
10a14e5325d6 fhem-net bridge local
5515bacccdf4 host host local
022cdf1cf77e none null local
Kann mir jemand helfen das wieder zum laufen zu bekommen?
Grüße, Stephan
du willst dem Unifi Modul wahrscheinlich sagen, dass der Controller über den DNS Namen oder die IP des Docker Hosts erreichbar ist.
Oder deinem lokalen DNS (wo auch immer der läuft) sagen, dass unifi.deinedomain.tld auf die IP des Docker Hosts zeigt.
Um den Docker Host aus dem FHEM Container heraus zu erreichen, kannst du auch den DNS Namen "host.docker.internal" verwenden, siehe README:
https://github.com/fhem/fhem-docker#connect-to-docker-host-from-within-container (https://github.com/fhem/fhem-docker#connect-to-docker-host-from-within-container)
Habe ich probiert und die IP im def mit 'host.docker.internal' ersetzt.
Ergebnis: disconnected.
Hier noch das List, dass ich eingangs vergessen hab:
Internals:
DEF host.docker.internal 8443 crypt:450f5d560a1b56410d crypt:480d60771a607809322e5670152c1256
FUUID 5cb4556e-f33f-04a0-57c0-841bebd114067c0d
NAME UnifiController
NOTIFYDEV global
NR 129
NTFY_ORDER 50-UnifiController
STATE disconnected
TYPE Unifi
UC_VERSION unknown
VERSION 3.3.3
READINGS:
2019-07-14 18:11:33 presence_Anika
2019-07-14 18:11:33 presence_AnikaNum
2019-07-14 18:11:33 presence_Stephan
2019-07-14 18:11:33 presence_StephanNum
2019-07-14 18:11:33 state disconnected
accespoints:
alerts_unarchived:
clients:
events:
helper:
password crypt:480d60771a607809322e5670152c1256
username crypt:450f5d560a1b56410d
hotspot:
vouchers:
httpParams:
ignoreredirects 1
loglevel 5
method POST
noshutdown 0
timeout 5
hash:
sslargs:
SSL_verify_mode 0
unifi:
CONNECTED disconnected
eventPeriod 24
interval 30
url https://host.docker.internal:8443/api/s/default/
customClientReadings:
attr_value .:^accesspoint|^essid|^hostname|^last_seen|^snr|^uptime
parts:
0000000_part:
ReadingRegEx ^accesspoint|^essid|^hostname|^last_seen|^snr|^uptime
nameRegEx .
updateDispatch:
wlans:
Attributes:
DbLogExclude .*
DbLogInclude presence_AnikaNum,presence_StephanNum
event-min-interval (presence_AnikaNum|presence_StephanNum):900
event-on-change-reading state
group Service
icon im_underline
pr_Anika_map presence_Anika
pr_Stephan_map presence_Stephan
room System->Hardware
userReadings presence_Stephan {
if (ReadingsVal('UnifiController','Stephans-i8','') eq 'connected')
{return 'present'}
elsif (ReadingsVal('UnifiController','Stephans-i8','') eq 'disconnected')
{return 'absent'}
},
presence_StephanNum {
if (ReadingsVal('UnifiController','Stephans-i8','') eq 'connected')
{return 1}
elsif (ReadingsVal('UnifiController','Stephans-i8','') eq 'disconnected')
{return 0}
},
presence_Anika {
if (ReadingsVal('UnifiController','Galaxy-S9','') eq 'connected')
{return 'present'}
elsif (ReadingsVal('UnifiController','Galaxy-S9','') eq 'disconnected')
{return 'absent'}
},
presence_AnikaNum {
if (ReadingsVal('UnifiController','Galaxy-S9','') eq 'connected')
{return 1}
elsif (ReadingsVal('UnifiController','Galaxy-S9','') eq 'disconnected')
{return 0}
}
userattr pr_Anika pr_Anika_map pr_Stephan pr_Stephan_map structexclude
Gesendet von iPhone mit Tapatalk
wenn ich im Modul verbose auf 5 stelle, bekomme ich folgende Fehlermeldungen im Log
UnifiController (Unifi_Login_Send) - executed.
UnifiController (Unifi_Login_Receive) - executed.
UnifiController (Unifi_Login_Receive) - Error while requesting https://host.docker.internal:8443/api/login - DNS: short DNS answer
UnifiController (Unifi_Login_Receive) - Connect/Login to Unifi-Controller failed. Will try again after interval...
Hat es möglicherweise etwas mit HTTPS zutun? Im Standard Image ist das ja nicht drin, wenn ich das richtig im Kopf hab, oder?!
Zitat von: Loredo am 14 Juli 2019, 15:05:04
du willst dem Unifi Modul wahrscheinlich sagen, dass der Controller über den DNS Namen oder die IP des Docker Hosts erreichbar ist.
Oder deinem lokalen DNS (wo auch immer der läuft) sagen, dass unifi.deinedomain.tld auf die IP des Docker Hosts zeigt.
Um den Docker Host aus dem FHEM Container heraus zu erreichen, kannst du auch den DNS Namen "host.docker.internal" verwenden, siehe README:
https://github.com/fhem/fhem-docker#connect-to-docker-host-from-within-container (https://github.com/fhem/fhem-docker#connect-to-docker-host-from-within-container)
Bist du sicher, dass das funktioniert?
Wenn ich versuche aus dem FHEM-Container danach zu pingen, bekomme ich als Antwort
unkown host
Wohingegen ein Ping auf die IP-Adresse funktioniert.
In der Doku steht auch, dass das nur für entwicklungszwecke funktioniert?!
Gesendet von iPhone mit Tapatalk
Ja, dennoch hängt es auch von deiner lokalen Konstellation ab, also wie beispielsweise dein Host System konfiguriert ist.
Du kannst nachsehen, was in /etc/hosts steht und Einträge, die erzeugt werden, beim Start im Docker Log sehen.
Wie kommst du zu dem Schluss, dass die Funktion nur für Entwicklungszwecke sei? Davon lese ich nichts ;-)
Du kannst aber DOCKER_HOST als Umgebungsvariable für den Container setzen und somit manuell die IP hinterlegen, wenn die automatische Ermittlung nicht richtig ist. Das wäre eine Alternative dazu, dass du die IP direkt beim FHEM Device einträgst, was ich oben ja auch schon als weitere Möglichkeit genannt hatte.
Zitat von: Loredo am 15 Juli 2019, 20:29:09
Ja, dennoch hängt es auch von deiner lokalen Konstellation ab, also wie beispielsweise dein Host System konfiguriert ist.
Du kannst nachsehen, was in /etc/hosts steht und Einträge, die erzeugt werden, beim Start im Docker Log sehen.
Wie kommst du zu dem Schluss, dass die Funktion nur für Entwicklungszwecke sei? Davon lese ich nichts ;-)
ich hatte nur mal kurz danach gegooglet, um mehr darüber zu erfahren. Gelich beim ersten Treffer (https://docs.docker.com/docker-for-mac/networking/) sit dann folgendes zu lesen.
ZitatFrom 18.03 onwards our recommendation is to connect to the special DNS name host.docker.internal, which resolves to the internal IP address used by the host. This is for development purpose and will not work in a production environment outside of Docker Desktop for Mac.
Ist zwar Docker for Mac aber bin erstmal davon ausgegangen, dass das an dieser Stelle keinen großen unterschied macht.
ZitatDu kannst aber DOCKER_HOST als Umgebungsvariable für den Container setzen und somit manuell die IP hinterlegen, wenn die automatische Ermittlung nicht richtig ist. Das wäre eine Alternative dazu, dass du die IP direkt beim FHEM Device einträgst, was ich oben ja auch schon als weitere Möglichkeit genannt hatte.
Ich werd das mal probieren aber ich finde halt nach wie vor merkwürdig, dass ich die IP des Hosts aus dem FHEM-Container anpingen kann aber das Modul sich nicht verbinden will, denn offenbar ist die IP ja aus dem Container heraus zu erreichen.
Zitat von: balli1187 am 16 Juli 2019, 09:57:03
ich hatte nur mal kurz danach gegooglet, um mehr darüber zu erfahren. Gelich beim ersten Treffer (https://docs.docker.com/docker-for-mac/networking/ (https://docs.docker.com/docker-for-mac/networking/)) sit dann folgendes zu lesen.Ist zwar Docker for Mac aber bin erstmal davon ausgegangen, dass das an dieser Stelle keinen großen unterschied macht.Ich werd das mal probieren aber ich finde halt nach wie vor merkwürdig, dass ich die IP des Hosts aus dem FHEM-Container anpingen kann aber das Modul sich nicht verbinden will, denn offenbar ist die IP ja aus dem Container heraus zu erreichen.
Deine Eigenrecherche ist löblich ;-)
Dennoch stimmt das eben hier nicht, weil die Funktion manuell direkt ins Image eingebaut ist, unabhängig davon, ob du Docker auf einem Mac betreibst oder nicht. Es wird einfach nur der selbe DNS Name Verwendet.
ich habe jetzt das Modul nochmal komplett gelöscht und neu definiert. Was soll ich sagen... Jetzt ist er verbunden.
Es funktioniert mit der IP und auch mit dem Hostnamen der Maschine, so wie ich ihn in der Fritzbox sehe.
Trage ich jedoch 'host.docker.internal' ein --> disconnected.
Vielen Dank für deine Hilfe.