Aaaalso...
Grundsätzlich gibt es verschiedene Möglichkeiten, das Netzwerk für Docker Container zu konfigurieren. Die bekanntesten sind hierbei
bridge und
host.
bridge erzeugt eine Network Bridge, d.h. es wird ein Adressmapping zwischengeschaltet. Der Container hat intern ein eigenes Subnetz. Da die Adresse nach außen gemappt wird, kann bei der Gelegenheit auch der Port umgeschrieben werden. Die Anwendung im Container läuft zum Beispiel auf Port 8080, über das Mapping wird aber Port 8081 zugewiesen,
host bedeutet, der Container nutzt die IP-Adresse des Host Systems und somit auch den IP Stack des Hosts direkt. Ein Port Mapping ist somit nicht möglich, die Anwendung im Container belegt direkt den Port auf dem Host.
Selbstverständlich kann man auch den openHAB Container im bridge Mode betreiben, allerdings ist das nicht ratsam, denn es gibt einen großen Pferdefuß im bridged Mode, und das ist das separate Subnetz. openHAB verwendet zeroconf, avahi, mdns und diverse andere Akronyme

welche samt und sonders auf Multicast aufsetzen. Multicast ist überaus praktisch im LAN, weil es die verfügbaren Ressourcen schont. Dummerweise wird Multicast aber nicht geroutet, was wiederum bedeutet, dass der Multicast Datenverkehr nicht über die bridge in den Container weitergereicht werden kann.
Aus diesem Grund sollte openHAB im host Mode laufen.
Was die Portzuweisungen betrifft, so kann man die Ports für openHAB über die Environment Variablen setzen (also die Konfigurationsdatei des Containers).
Für die bridge Mode Container gibt es dann gewöhnlich zwei Stellen, um die Ports zu beeinflussen, nämlich die Environment Variablen (falls der Parameter zugänglich gemacht wurde) und zusätzlich das Port Mapping
Beispiel anhand eines openHAB Containers:
Code: Alles auswählen
version: '2.2'
services:
openhab:
image: "openhab/openhab:latest"
restart: always
network_mode: bridge
ports:
- 8080:8080 # links Host-Port, rechts Container Port
- 8443:8443 # links Host-Port, rechts Container Port
volumes:
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
- "/portainer/Files/AppData/Config/openHAB4/openhab_addons:/openhab/addons"
- "/portainer/Files/AppData/Config/openHAB4/openhab_conf:/openhab/conf"
- "/portainer/Files/AppData/Config/openHAB4/openhab_userdata:/openhab/userdata"
environment:
CRYPTO_POLICY: "unlimited"
EXTRA_JAVA_OPTS: "-Duser.timezone=Europe/Berlin"
OPENHAB_HTTP_PORT: "8080" # Port innerhalb des Containers
OPENHAB_HTTPS_PORT: "8443" # Port innerhalb des Containers
USER_ID: "998"
GROUP_ID: "997"
Der Block
ports entfällt beim host mode, weil wirkungslos.
So sieht bei mit der zigbee2mqtt Container aus:
Code: Alles auswählen
version: '3.8'
services:
zigbee2mqtt:
container_name: zigbee2mqtt
image: koenkk/zigbee2mqtt:latest
restart: unless-stopped
volumes:
- /portainer/Files/AppData/Config/zigbee2mqtt/data:/app/data
- /run/udev:/run/udev:ro
ports:
# Frontend port
- 28080:8080
environment:
- TZ=Europe/Berlin
#devices:
# Make sure this matched your adapter location
#- /dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0018ED3DDF-if00:/dev/ttyACM0
Ich habe ein
tubeszb-cc2652-poe als Zigbee "over LAN" Coordinator, der wird einfach über die Konfiguration innerhalb des Containers verbunden und taucht nicht im yaml Code des Containers auf.
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)