# Backend (in Docker) zeigt Port 8082 für UI nicht.

**URL:** <https://community.openems.io/t/backend-in-docker-zeigt-port-8082-fur-ui-nicht/10691>\
**Category:** Deutsches Forum\
**Created:** [January 3, 2026, 9:32pm UTC](https://community.openems.io/t/backend-in-docker-zeigt-port-8082-fur-ui-nicht/10691 "2026-01-03T21:32:06Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![S1m0n](https://community.openems.io/letter_avatar_proxy/v4/letter/s/5f8ce5/32.png) [@S1m0n](https://community.openems.io/u/S1m0n)\
**Post date:** [January 3, 2026, 9:32pm UTC](https://community.openems.io/t/backend-in-docker-zeigt-port-8082-fur-ui-nicht/10691/1 "2026-01-03T21:32:06Z")

</div>

Hallo zusammen,

Zuerst einmal vielen Dank für dieses sehr coole Projekt! Ich finde es fantastisch, was hier alles schon aufgebaut wurde. Ich selbst kann davon leider noch nicht allzu viel “geniessen”, da ich immer noch ziemlich tief in der (bekanntermassen steilen) Lernkurve stecke 🤔.

Lokal habe ich eine erste Simulation zum Laufen gebracht und möchte darum als nächsten Lernschritt das Backend “dockerisiert” aufsetzen.

Leider bekomme ich aber partout die Verbindung zwischen UI und Backend nicht zum laufen.

Zunächst die generellen Informationen:

Setup: Backend, UI, NGINX (reverse proxy) und Let’s encrypt jeweils in eigenem Container  
System: Ubuntu 24.04.3 LTS (GNU/Linux 6.8.0-90-generic x86\_64)  
Docker: 29.1.3  
NGINX: alpine  
Let’s encrypt: certbot  
Edge: noch nicht implementiert  
Backend: diverse (2025.10.0, 2025.12.0, 2026.1.0)  
Ui: latest (2025.12.0)  
DB: noch nicht implementiert  
Odoo: noch nicht implementiert

Backend scheint zu laufen und Port 8079 ist erreichbar (Apache Felix).

Meine docker-compose.yml sieht wie folgt aus:

```yaml
services:
  # ---------- Certbot ----------
  certbot:
    image: certbot/certbot
    container_name: certbot
    volumes:
      - ./certs:/etc/letsencrypt
      - ./certbot-www:/var/www/certbot
    command: >
      certonly --webroot -w /var/www/certbot
      -d example.com -d ems.example.com
    networks:
      - webnet

  # ---------- Nginx Reverse Proxy ----------
  nginx:
    image: nginx:alpine
    container_name: nginx
    ports:
      - "443:443"
      - "80:80"
    volumes:
      - ./certs:/etc/letsencrypt:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
    depends_on: # service names
      - openems-backend
      - openems-ui
    networks:
      - webnet

  # ---------- OpenEMS Backend ----------
  openems-backend: # service name
# image: openems/backend:latest
    image: openems/backend:2025.10.0
    container_name: openems_backend # container name
    hostname: openems_backend
    restart: unless-stopped
    volumes:
      - openems-backend-conf:/var/opt/openems/config:rw
      - openems-backend-data:/var/opt/openems/data:rw
    ports:
      - 8079:8079 # Apache-Felix
      - 8081:8081 # Edge-Websocket
      - 8082:8082 # UI-Websocket
    networks:
      - webnet

  # ---------- OpenEMS UI ----------
  openems-ui:
    image: openems/ui-backend:latest
    container_name: openems_ui
    hostname: openems_ui
    restart: unless-stopped
    environment:
      - WEBSOCKET_HOST=example.com
      - WEBSOCKET_PORT=443
      - WEBSOCKET_PROTOCOL=wss

    networks:
      - webnet

volumes:
  openems-backend-conf:
  openems-backend-data:
   
networks:
  webnet:
    driver: bridge

```

Diese Config lehnt sich hier an: [Deploy OpenEMS Backend to Docker :: Open Energy Management System](https://openems.github.io/openems.io/openems/latest/backend/deploy/docker.html)

Der Vollständigkeit halber hier auch noch meine NGINX Config (./nginx/conf.d/default\_prod.conf)

```yaml
# -------- HTTP → HTTPS Redirect --------
server {
    listen 80;
    server_name example.com ems.example.com;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

# -------- HTTPS Server --------
server {
# listen 443 ssl http2;
    listen 443 ssl;
    server_name example.com ems.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
# ssl_ciphers HIGH:!aNULL:!MD5;

    # ---------- OpenEMS UI ----------
    location / {
        proxy_pass http://openems-ui:80;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $remote_addr;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    # ---------- OpenEMS Edge -> OpenEMS Backend ----------
    location /edge-to-backend {
        proxy_pass http://openems-backend:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        access_log /var/log/nginx/edge-to-backend.access.log;
        error_log /var/log/nginx/edge-to-backend.error.log;
    }

    # ---------- OpenEMS UI -> OpenEMS Backend----------
    location /openems-backend {
        proxy_pass http://openems_backend:8082;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
# proxy_set_header X-Forwarded-Proto https;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        access_log /var/log/nginx/ui-to-backend.access.log;
        error_log /var/log/nginx/ui-to-backend.error.log;
    }
}

```

## Problembeschreibung

- alle Container starten
- Das Backend lässt sich über Apache Felix (port 8079) erreichen
- [https://example.com](https://example.com) zeigt: Server nicht erreichbar
- Ein Verbindung zwischen UI und Backend kommt meines Erachtens nicht zu Stande.

## Dinge die ich überprüft/probiert habe:

### Ports

```auto
sudo docker exec -it openems_backend sh -lc 'netstat -tulpn | egrep "8079|8081|8082" || true'

tcp 0 0 :::8079 :::* LISTEN -

```

Also kein Port 8082

### Varianten in den Configs

Ein paar wenige Versuche habe ich als Kommentar in meinen Configs stehen lassen. Andere Versuche habe ich der Übersicht halber wieder gelöscht.

### Apache Felix → Core.JsonRpcRequestHandler:

- Status: unsatisfied (reference)
- Reference edgeManager: Unsatisfied

Ist das eine Spur oder ein Nebenschauplatz?🤷‍♂️

### Verschiedene Versionen des Backend

- 2025.10.0
- 2025.12.0
- 2026.1.0

Bin mir aber noch nicht mal sicher, ob ich überhaupt an der richtigen Stelle suche…  
Vielen Dank jetzt schon für jeden Hinweis.

Viele Grüsse, Simon

---

<div class="post-metadata">

**Author:** ![chpo](https://community.openems.io/letter_avatar_proxy/v4/letter/c/cdc98d/32.png) [@chpo](https://community.openems.io/u/chpo)\
**Post date:** [January 6, 2026, 8:02pm UTC](https://community.openems.io/t/backend-in-docker-zeigt-port-8082-fur-ui-nicht/10691/2 "2026-01-06T20:02:33Z")

</div>

Hallo Simon,

ich würde schlicht behaupten, dass das backend gar nicht vollständig hochgefahren ist. Schau dir doch mal die LOG-Ausgaben an (docker compose logs openems-backend). Auch in der Felix-Admin-Oberfläche im Menü unter OSGi→LogServices kann man einiges sehen.

Ich nutze zwar ein vollständig eigenes docker setup, aber ich denke die Angaben

```
 `environment:
  - WEBSOCKET_HOST=``example.com``
  - WEBSOCKET_PORT=443
  - WEBSOCKET_PROTOCOL=wss`

```

können so nicht richtig sein, da du sicher nicht Eigentümer von [example.com](http://example.com) bist. Da müsste afaik Hostname und Port hin, wo das backend zu erreichen ist - aus Sicht des Browers.

---

<div class="post-metadata">

**Author:** ![S1m0n](https://community.openems.io/letter_avatar_proxy/v4/letter/s/5f8ce5/32.png) [@S1m0n](https://community.openems.io/u/S1m0n)\
**Post date:** [January 8, 2026, 11:06am UTC](https://community.openems.io/t/backend-in-docker-zeigt-port-8082-fur-ui-nicht/10691/3 "2026-01-08T11:06:55Z")

</div>

Hallo chpo

Vielen Dank für deine Rückmeldung.

- Startet das Backend überhaupt?  
Ich habe mir die LOG-Ausgabe angeschaut. Sieht IMHO nicht schlecht aus. Folgende Auffälligkeiten habe ich entdeckt:

> openems\_backend | [custom-init] No custom files found, skipping…

und ein [WARN] habe ich gefunden:

> openems\_backend | 2026-01-01T17:08:25,824 [hread-11] WARN [end.metadata.file.MetadataFile] [Metadata.File] Unable to read file [/var/opt/openems/metadata.json]: /var/opt/openems/metadata.json (No such file or directory)  
> openems\_backend | java.io.FileNotFoundException: /var/opt/openems/metadata.json (No such file or directory)  
> …

Alles andere sind [INFO] z.T. auch mit “stopped”:  
Hier darum die ganze LOG-Ausgabe:

```auto
sudo docker compose logs openems-backend

openems_backend | [migrations] started
openems_backend | [migrations] no migrations found
openems_backend | usermod: no changes
openems_backend | ───────────────────────────────────────────
openems_backend | __________  __________  __________  _____
openems_backend | | | _ | __| | |__ | | __|
openems_backend | | | | __|__ | | | | __| | | |__ |
openems_backend | | _____|__ | | _____|_|___ | _____|_|_|_|_____ |
openems_backend |
openems_backend | Based on images from linuxserver.io
openems_backend | ───────────────────────────────────────────
openems_backend | for further information visit:
openems_backend | https://openems.io/
openems_backend |
openems_backend | ───────────────────────────────────────
openems_backend | GID/UID: 911/911
openems_backend | ───────────────────────────────────────
openems_backend | [custom-init] No custom files found, skipping...
openems_backend | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling Java Util Logging API support.
openems_backend | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling SLF4J API support.
openems_backend | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling Apache Commons Logging API support.
openems_backend | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling JULI Logger API support.
openems_backend | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling Avalon Logger API support.
openems_backend | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling JBoss Logging API support.
openems_backend | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling Log4J v1 API support.
openems_backend | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling Log4J v2 API support.
openems_backend | 2026-01-01T17:08:25.174201341Z FelixStartLevel INFO Initializing Log4j2 using default configuration
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Initializing Log4j2 using default configuration
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Starting LoggerContext[name=pax-logging] with configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761...
openems_backend | 2026-01-01T17:08:25.387040537Z FelixStartLevel INFO Starting LoggerContext[name=pax-logging] with configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761...
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Starting configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761...
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761 started.
openems_backend | 2026-01-01T17:08:25.393579157Z FelixStartLevel INFO Starting configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761...
openems_backend | 2026-01-01T17:08:25.394176442Z FelixStartLevel INFO Configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761 started.
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Stopping configuration org.apache.logging.log4j.core.config.DefaultConfiguration@54ba9525...
openems_backend | 2026-01-01T17:08:25.396801051Z FelixStartLevel INFO Stopping configuration org.apache.logging.log4j.core.config.DefaultConfiguration@54ba9525...
openems_backend | 2026-01-01T17:08:25.397880387Z FelixStartLevel INFO Configuration org.apache.logging.log4j.core.config.DefaultConfiguration@54ba9525 stopped.
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Configuration org.apache.logging.log4j.core.config.DefaultConfiguration@54ba9525 stopped.
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : LoggerContext[name=pax-logging] started with configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761.
openems_backend | 2026-01-01T17:08:25.400404737Z FelixStartLevel INFO LoggerContext[name=pax-logging] started with configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761.
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Log4J2 configured using default configuration.
openems_backend | 2026-01-01T17:08:25.401233588Z FelixStartLevel INFO Log4J2 configured using default configuration.
openems_backend | org.ops4j.pax.logging.pax-logging-log4j2 [org.ops4j.pax.logging.spi.support.EventAdminConfigurationNotifier] INFO : Sending Event Admin notification (configuration successful) to org/ops4j/pax/logging/Configuration
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Stopping configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761...
openems_backend | 2026-01-01T17:08:25.405088460Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Stopping configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761...
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761 stopped.
openems_backend | 2026-01-01T17:08:25.407662885Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761 stopped.
openems_backend | 2026-01-01T17:08:25.474006478Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Starting LoggerContext[name=pax-logging] with configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087...
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Starting LoggerContext[name=pax-logging] with configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087...
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Starting configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087...
openems_backend | 2026-01-01T17:08:25.625969416Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Starting configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087...
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087 started.
openems_backend | 2026-01-01T17:08:25.631115301Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087 started.
openems_backend | 2026-01-01T17:08:25.634832467Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Stopping configuration org.apache.logging.log4j.core.config.NullConfiguration@5d0a3db3...
openems_backend | 2026-01-01T17:08:25.635737221Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Configuration org.apache.logging.log4j.core.config.NullConfiguration@5d0a3db3 stopped.
openems_backend | 2026-01-01T17:08:25.635969990Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO LoggerContext[name=pax-logging] started with configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087.
openems_backend | 2026-01-01T17:08:25.636070760Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Log4J2 configured using configuration from passed properties
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Stopping configuration org.apache.logging.log4j.core.config.NullConfiguration@5d0a3db3...
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Configuration org.apache.logging.log4j.core.config.NullConfiguration@5d0a3db3 stopped.
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : LoggerContext[name=pax-logging] started with configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087.
openems_backend | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Log4J2 configured using configuration from passed properties
openems_backend | 2026-01-01T17:08:25,645 [ogging])] INFO [ventAdminConfigurationNotifier] Sending Event Admin notification (configuration successful) to org/ops4j/pax/logging/Configuration
openems_backend | 2026-01-01T17:08:25,644 [artLevel] INFO [backend.application.BackendApp] ===========================================
openems_backend | 2026-01-01T17:08:25,656 [artLevel] INFO [backend.application.BackendApp] OpenEMS Backend version [2025.10.0] started
openems_backend | 2026-01-01T17:08:25,657 [artLevel] INFO [backend.application.BackendApp] ===========================================
openems_backend | 2026-01-01T17:08:25,707 [artLevel] INFO [.debugcycle.DebugCycleExecutor] Update metrics all 5 Seconds
openems_backend | 2026-01-01T17:08:25,818 [artLevel] INFO [end.metadata.file.MetadataFile] Activate [path=/var/opt/openems/metadata.json]
openems_backend | 2026-01-01T17:08:25,824 [hread-11] WARN [end.metadata.file.MetadataFile] [Metadata.File] Unable to read file [/var/opt/openems/metadata.json]: /var/opt/openems/metadata.json (No such file or directory)
openems_backend | java.io.FileNotFoundException: /var/opt/openems/metadata.json (No such file or directory)
openems_backend | at java.base/java.io.FileInputStream.open0(Native Method)
openems_backend | at java.base/java.io.FileInputStream.open(Unknown Source)
openems_backend | at java.base/java.io.FileInputStream.<init>(Unknown Source)
openems_backend | at java.base/java.io.FileInputStream.<init>(Unknown Source)
openems_backend | at java.base/java.io.FileReader.<init>(Unknown Source)
openems_backend | at io.openems.backend.metadata.file.MetadataFile.refreshData(MetadataFile.java:190)
openems_backend | at io.openems.backend.metadata.file.MetadataFile.lambda$activate$0(MetadataFile.java:117)
openems_backend | at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(Unknown Source)
openems_backend | at java.base/java.lang.Thread.run(Unknown Source)
openems_backend | 2026-01-01T17:08:25,876 [artLevel] INFO [d.timedata.dummy.TimedataDummy] [Timedata.Dummy] Activate
openems_backend | 2026-01-01T17:08:26,279 [artLevel] INFO [rg.eclipse.jetty.server.Server] jetty-12.0.25; built: 2025-08-11T23:52:37.219Z; git: a862b76d8372e24205765182d9ae1d1d333ce2ea; jvm 21.0.8+9-LTS
openems_backend | 2026-01-01T17:08:26,346 [artLevel] INFO [ession.DefaultSessionIdManager] Session workerName=node0
openems_backend | 2026-01-01T17:08:26,386 [artLevel] INFO [.server.handler.ContextHandler] Started oeje10s.ServletContextHandler@6fda328d{ROOT,/,b=null,a=AVAILABLE,h=oeje10s.SessionHandler@53c5a4bc{STARTED}}
openems_backend | 2026-01-01T17:08:26,398 [artLevel] INFO [.servlet.ServletContextHandler] Started oeje10s.ServletContextHandler@6fda328d{ROOT,/,b=null,a=AVAILABLE,h=oeje10s.SessionHandler@53c5a4bc{STARTED}}
openems_backend | 2026-01-01T17:08:26,410 [artLevel] INFO [rg.eclipse.jetty.server.Server] Started oejs.Server@511efb0b{STARTING}[12.0.25,sto=0] @3599ms
openems_backend | 2026-01-01T17:08:26,524 [artLevel] INFO [jetty.server.AbstractConnector] Started ServerConnector@72c3ae47{HTTP/1.1, (http/1.1)}{0.0.0.0:8079}
openems_backend | 2026-01-01T17:08:26,531 [artLevel] INFO [org.apache.felix.http] Started Jetty 12.0.25 at port(s) HTTP:8079 on context path / [minThreads=8,maxThreads=200,acceptors=1,selectors=1,virtualThreadsEnabled=false]
openems_backend | 2026-01-01T17:08:26,641 [artLevel] INFO [org.apache.felix.webconsole] org.apache.felix.webconsole.internal.compendium.PreferencesConfigurationPrinter not enabled. Reason: Class org/osgi/service/prefs/BackingStoreException missing
openems_backend | 2026-01-01T17:08:26,697 [artLevel] INFO [org.apache.felix.webconsole] Servlet 3 bridge enabled
openems_backend | Connection to 127.0.0.1 8079 port [tcp/*] succeeded!
openems_backend | [ls.io-init] done.

```

Wie beurteilst du den LOG?

- nicht Eigentümer von [example.com](http://example.com/)  
Sorry, da war ich zu wenig ausführlich. Die Domain gehört mir tatsächlich nicht. Ich habe aber zu Testzwecken eine Domain registriert und auf die IP meines Test-Servers verbunden. [example.com](http://example.com) ist darum nur ein Platzhalter, damit ich meine “provisorische Test-URL” nicht publizieren muss. Habe das bei anderen Posts auch schon gesehen und dachte, das sein üblich.

Zudem muss ich noch einen Nachtrag machen: Beim copy-pasten ist mir bei der NGINX-config eine Klammer verloren gegangen. Im Code ist sie aber vorhanden:

```auto
    # ---------- OpenEMS UI ----------
    location / {
        proxy_pass http://openems-ui:80;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $remote_addr;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    
    # ---------- OpenEMS Edge -> OpenEMS Backend ----------

```

(Gibt es die Möglichkeit in diesem Forum seine eigenen Einträg nachträglich zu editieren?)

---

<div class="post-metadata">

**Author:** ![chpo](https://community.openems.io/letter_avatar_proxy/v4/letter/c/cdc98d/32.png) [@chpo](https://community.openems.io/u/chpo)\
**Post date:** [January 8, 2026, 12:46pm UTC](https://community.openems.io/t/backend-in-docker-zeigt-port-8082-fur-ui-nicht/10691/4 "2026-01-08T12:46:09Z")

</div>

Ich habe das Backend gerade nicht mehr laufen. Falls du nur ein paar einfach Sachen machen willst, reicht ein Edge.

Ich denke aber im Backend braucht man die metadata.json, da darin Benutzerinformationen konfiguriert werden, sofern du Metadata.File verwendest. Für nen Test wäre auch Metadata.Dummy eine Möglichkeit. Ausserdem pfüfe mal im Felix, ob du einen Ui.Websocket konfiguriert und aktiviert hast.

---

<div class="post-metadata">

**Author:** ![da-Kai](https://community.openems.io/user_avatar/community.openems.io/da-kai/32/1023_2.png) [@da-Kai](https://community.openems.io/u/da-Kai)\
**Post date:** [January 12, 2026, 1:33pm UTC](https://community.openems.io/t/backend-in-docker-zeigt-port-8082-fur-ui-nicht/10691/5 "2026-01-12T13:33:39Z")

</div>

Hallo @S1m0n,

tatsächlich sind deine variablen

```yaml
    environment:
      - WEBSOCKET_HOST=example.com
      - WEBSOCKET_PORT=443
      - WEBSOCKET_PROTOCOL=wss

```

falsch. Diese geben nicht an, wo dein UI gehostet ist, sondern wo der UI-Websocket des backends ereichbar ist.

für deine configuration sollten die standart variablen

```yaml
    environment:
      - WEBSOCKET_HOST=openems_backend
      - WEBSOCKET_PORT=8082

```

funktionieren.

Und du könntest versuchen die volumes `openems-backend-conf` und `openems-backend-data` zu löschen, um das metadata.json problem zu lösen.

---

<div class="post-metadata">

**Author:** ![S1m0n](https://community.openems.io/letter_avatar_proxy/v4/letter/s/5f8ce5/32.png) [@S1m0n](https://community.openems.io/u/S1m0n)\
**Post date:** [January 18, 2026, 8:48pm UTC](https://community.openems.io/t/backend-in-docker-zeigt-port-8082-fur-ui-nicht/10691/6 "2026-01-18T20:48:34Z")

</div>

Hallo chpo

Danke für die Hinweise!

Habe Metadata auf Dummy gesetzt und geprüft ob Ui.Websocket und Edge.Websocket in der Apache Felix Web Console konfiguriert sind.

Jetzt sieht es schon etwas besser aus:

```auto
sudo docker exec -it openems_backend sh -lc 'netstat -tulpn | egrep "8079|8081|8082" || true'
tcp 0 0 :::8081 :::* LISTEN -
tcp 0 0 :::8082 :::* LISTEN -
tcp 0 0 :::8079 :::* LISTEN -

```

Leider kommt aber bei Aufruf meiner Test-URL nach wie vor: “Server nicht erreichbar”

---

<div class="post-metadata">

**Author:** ![S1m0n](https://community.openems.io/letter_avatar_proxy/v4/letter/s/5f8ce5/32.png) [@S1m0n](https://community.openems.io/u/S1m0n)\
**Post date:** [January 18, 2026, 9:11pm UTC](https://community.openems.io/t/backend-in-docker-zeigt-port-8082-fur-ui-nicht/10691/7 "2026-01-18T21:11:42Z")

</div>

Hallo @da-Kai

Danke für deine Hinweise!

### WEBSOCKET\_HOST:

- habe ich entsprechend umgestellt.
- Das Verhalten meines Backends hat sich dadurch nicht verändert, ist aber sicher sauberer so.

Neu sieht mein docker-compose.yml wie folgt aus:

```auto
services:
  # ---------- Certbot ----------
  certbot:
    image: certbot/certbot
    container_name: certbot
    volumes:
      - ./certs:/etc/letsencrypt
      - ./certbot-www:/var/www/certbot
    command: >
      certonly --webroot -w /var/www/certbot
      -d example.com 
    networks:
      - webnet

  # ---------- Nginx Reverse Proxy ----------
  nginx:
    image: nginx:alpine
    container_name: nginx
    ports:
      - "443:443"
      - "80:80"
    volumes:
      - ./certs:/etc/letsencrypt:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
  # - ./certbot-www:/var/www/certbot:ro
    depends_on: # service names
      - openems-backend
      - openems-ui
    networks:
      - webnet

  # ---------- OpenEMS Backend ----------
  openems-backend: # service name: for internal DNS, how other container can find this one
# image: openems/backend:latest
    image: openems/backend:2025.10.0
    container_name: openems_backend # how docker addresses this container / name used in docker CLI
    hostname: openems_backend # within the container / for app identity / relevant for Java/OSGi
    restart: unless-stopped
    volumes:
      - openems-backend-conf:/var/opt/openems/config:rw
      - openems-backend-data:/var/opt/openems/data:rw
    ports:
      - 8079:8079 # Apache-Felix
      - 8081:8081 # Edge-Websocket
      - 8082:8082 # UI-Websocket
    networks:
      - webnet

# ---------- OpenEMS InfluxDB ----------
# initial code from: https://openems.github.io/openems.io/openems/latest/backend/deploy/docker.html#_add_influxdb_container
  openems_influxdb:
    image: influxdb:alpine
    container_name: openems_influxdb
    hostname: openems_influxdb
    restart: unless-stopped
    volumes:
      - openems-influxdb:/var/lib/influxdb2:rw
    ports:
      - 8086:8086

# ---------- OpenEMS UI ----------
  openems-ui:
    image: openems/ui-backend:latest
    container_name: openems_ui
    hostname: openems_ui
    restart: unless-stopped
    volumes:
      - openems-ui-conf:/etc/nginx:rw
      - openems-ui-log:/var/log/nginx:rw
    environment:
      - WEBSOCKET_HOST=openems-backend
      - WEBSOCKET_PORT=8082
# - WEBSOCKET_PROTOCOL=ws
    networks:
      - webnet

volumes:
  openems-backend-conf:
  openems-backend-data:
  openems-influxdb:
  openems-ui-conf:
  openems-ui-log:
  
networks:
  webnet:
    driver: bridge

```

Leider kommt immer noch “Server nicht erreichbar”

### Metadata.json

- Habe es auf Dummy gesetzt
- Habe metadata.json wie vorgeschlagen gebaut ([Backend Services :: Open Energy Management System](https://openems.github.io/openems.io/openems/latest/backend/service.html)) und in der Apache Felix Console entsprechend konfiguriert:

```auto
{
	edges: {
		edge0: {
			comment: "Edge #0",
			apikey: "edge0",
			setuppassword: "abcdefgh"
		}
	}
}

```

- Habe wie von dir vorgeschlagen, die beiden OpenEMS-volumes gelöscht

Leider alles ohne Erfolg.

### Logs

#### openems-ui

```auto
sudo docker logs openems_ui
[migrations] started
[migrations] no migrations found
usermod: no changes
───────────────────────────────────────────
 __________  __________  __________  _____
| | _ | __| | |__ | | __|
| | | __|__ | | | | __| | | |__ |
| _____|__ | | _____|_|___ | _____|_|_|_|_____ |

        OpenEMS UI for backend
    Based on images from linuxserver.io
───────────────────────────────────────────
for further information visit:
https://openems.io/

───────────────────────────────────────
GID/UID: 911/911
───────────────────────────────────────
sending incremental file list
./
dhparams.pem
openems-nginx.conf
site-confs/
site-confs/443-openems.conf.tpl
site-confs/80-openems.conf.tpl
snippets/
snippets/ssl-cert.conf
snippets/ssl.conf

sent 7,098 bytes received 149 bytes 14,494.00 bytes/sec
total size is 6,576 speedup is 0.91
HTTPS is disabled.
No Keys will be used.
[custom-init] No custom files found, skipping...

```

#### openems-backend

```auto
2026-01-18T21:03:01,665 [thread-1] INFO [.debugcycle.DebugCycleExecutor] [Ui.Websocket] [Ui.Websocket] [monitor] Connections: 0, Pool: 0/10, Pending: 0, Completed: 0, Active: 0
2026-01-18T21:03:01,665 [thread-1] INFO [.debugcycle.DebugCycleExecutor] [Edge.Websocket] [Edge.Websocket] [monitor] Connections: 0, Pool: 0/10, Pending: 0, Completed: 0, Active: 0

```

Ich sehe leider nicht, wo ich da ansetzen soll.

Brauche ich gültiges metadata.json file oder ist das eher “die nächste Baustelle”, wenn dann das Backend Ui mal läuft?

---

<div class="post-metadata">

**Author:** ![chpo](https://community.openems.io/letter_avatar_proxy/v4/letter/c/cdc98d/32.png) [@chpo](https://community.openems.io/u/chpo)\
**Post date:** [January 21, 2026, 8:30pm UTC](https://community.openems.io/t/backend-in-docker-zeigt-port-8082-fur-ui-nicht/10691/8 "2026-01-21T20:30:57Z")

</div>

Die beiden Variablen

```auto
 - WEBSOCKET_HOST=openems-backend
 - WEBSOCKET_PORT=8082

```

geben an, wie die UI, welche im Browser läuft, das backend erreichen kann.

1. wenn du also einen Browser in einem docker-container der dem Netz webnet zugeordnet ist startest, sollte es gehen, da docker alle services unter ihrem Namen im DNS bereitstellt.
2. wenn du “openems-backend” in deinem DNS-resolver (ich glaube unter Windows host.txt oder so ähnlich) einträgst sollte es auch gehen.
3. wenn dein Browser “openems-backend“ nicht auflösen kann, wird es nicht gehen.
4. wenn du dort den Hostnamen des Computers einträgst, auf dem docker läuft, sollte es gehen
5. wenn du dort “localhost” einträgst und den Browser auf dem gleichen Computer startest, sollte es gehen

Hintergrund: die UI läuft im Browser und wird versuchen, den eingetragenen Hostname “openems-backend” über DNS aufzulösen. Ganz ähnlich wie der Browser auch [www.google.de](http://www.google.de) auflöst. Du musst also etwas verwenden, dass der Browser in eine IP-Adresse übersetzen kann und die IP-Adresse sollte natürlich zum passenden Rechner gehören, wo das backend läuft. Die Details sind aber davon abhängig wie dein Netz gestaltet ist und was du erreichen willst.

---

<div class="post-metadata">

**Author:** ![sjjh](https://community.openems.io/user_avatar/community.openems.io/sjjh/32/2296_2.png) [@sjjh](https://community.openems.io/u/sjjh)\
**Post date:** [January 22, 2026, 9:28pm UTC](https://community.openems.io/t/backend-in-docker-zeigt-port-8082-fur-ui-nicht/10691/9 "2026-01-22T21:28:21Z")

</div>

> [@chpo](#):
>
> Hintergrund: die UI läuft im Browser und wird versuchen, den eingetragenen Hostname “openems-backend” über DNS aufzulösen. Ganz ähnlich wie der Browser auch [www.google.de](http://www.google.de) auflöst.

Sicher, dass das korrekt ist? Ich bin selber kein Dockerexperte, hatte aber verstanden, dass es darum geht wie der _Container auf dem Server_ den anderen Container erreichen kann (also Kommunikation innerhalb des Docker-Netzes), und nicht wie der _Browser auf dem Client_ den anderen Container (auf dem Server erreichen kann).

Meine Config funktioniert mit folgenden Angaben:

```auto
services:
  openems-edge:
    image: openems/edge:develop
    container_name: openems_edge
    hostname: openems_edge
[...]
  openems-ui:
    image: openems/ui-edge:develop
    container_name: openems_ui
    hostname: openems_ui
    restart: unless-stopped
    volumes:
      - openems-ui-conf:/etc/nginx:rw
      - openems-ui-log:/var/log/nginx:rw
    environment:
      - WEBSOCKET_HOST=openems_edge
      - WEBSOCKET_PORT=8085
[...]

```

Ich würde eher darauf tippen, dass das Problem von @S1m0n daher rührt, dass er dem Backend in seiner Config den Container-Namen und Hostnamen `openems_backend` gegeben hat, und in dem _ui-Block_ dann den Websocket Host mit `openems-backend` angegeben hat. Was zwei unterschiedliche Namen (`_` != `-`) sind. Aber wie gesagt, bin selber kein Docker-Experte, @da-Kai kann sonst sicherlich mehr dazu sagen. 🙂

---

<div class="post-metadata">

**Author:** ![chpo](https://community.openems.io/letter_avatar_proxy/v4/letter/c/cdc98d/32.png) [@chpo](https://community.openems.io/u/chpo)\
**Post date:** [February 7, 2026, 12:55pm UTC](https://community.openems.io/t/backend-in-docker-zeigt-port-8082-fur-ui-nicht/10691/10 "2026-02-07T12:55:10Z")

</div>

Da hast du @sjjh natürlich recht… die Namen sollten passen.

Die Angabe von “hostname” ist eigentlich gar nicht wirklich erfoderlich, da docker automatisch den hostnamen vom service-name ableitet. Ihr könntet den Parameter einfach weglassen. In der Umgebungsvariable WEBSOCKET\_HOST sollte der hostname des docker containers vom backend bzw. edge stehen. Also entweder die ganzen hostname weglassen und dort den service-name eintragen (in @S1m0n fall wäre das openems-backend) oder die hostname drinlassen, dann aber den dort eingetragenen Wert nutzen (bei @S1m0n dann openems\_backend).

EDIT: auch in der Konfiguration des ngnix containers darauf achten, dass die Hostnamen stimmen.

---

<div class="post-metadata">

**Author:** ![S1m0n](https://community.openems.io/letter_avatar_proxy/v4/letter/s/5f8ce5/32.png) [@S1m0n](https://community.openems.io/u/S1m0n)\
**Post date:** [February 15, 2026, 10:02pm UTC](https://community.openems.io/t/backend-in-docker-zeigt-port-8082-fur-ui-nicht/10691/11 "2026-02-15T22:02:37Z")

</div>

Hallo zusammen und vielen Dank für eure Unterstützung und Hinweise.

Schlussendlich lag es tatsächlich wie von @sjjh vermutet an der Namensgebung im docker-compose.

Jetzt findet das UI das Backend.

Der Vollständigkeit halber hier mein code, wobei ich wiederum die Test-URL meines Servers durch [example.com](http://example.com) ersetzt habe.

nginx: default.conf

```auto
# -------- HTTP → HTTPS Redirect --------
server {
    listen 80;
    server_name example.com ems.example.com;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

# -------- HTTPS Server --------
server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    # ---------- OpenEMS UI ----------
    location / {
        proxy_pass http://openems-ui:80;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $remote_addr;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    # ---------- OpenEMS Edge -> OpenEMS Backend ----------
    location /edge-to-backend {
        proxy_pass http://openems-backend:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        access_log /var/log/nginx/edge-to-backend.access.log;
        error_log /var/log/nginx/edge-to-backend.error.log;
    }

    # ---------- OpenEMS UI -> OpenEMS Backend----------
    location /ui-to-backend {
        proxy_pass http://openems-backend:8082;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header X-Forwarded-Proto $scheme;

        access_log /var/log/nginx/ui-to-backend.access.log;
        error_log /var/log/nginx/ui-to-backend.error.log;
    }
}

```

docker-compose.yml

```auto
services:
  # ---------- Certbot ----------
  certbot:
    image: certbot/certbot
    container_name: certbot
    volumes:
      - ./certs:/etc/letsencrypt
      - ./certbot-www:/var/www/certbot
    command: >
      certonly --webroot -w /var/www/certbot
      -d example.com
    networks:
      - webnet

  # ---------- Nginx Reverse Proxy ----------
  nginx:
    image: nginx:alpine
    container_name: nginx
    ports:
      - "443:443"
      - "80:80"
    volumes:
      - ./certs:/etc/letsencrypt:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./certbot-www:/var/www/certbot:ro
    depends_on: # service names
      - openems-backend
      - openems-ui
    networks:
      - webnet

  # ---------- OpenEMS Backend ----------
  openems-backend:  
    image: openems/backend:latest
    container_name: openems_backend     
    hostname: openems_backend
    restart: unless-stopped
    volumes:
      - openems-backend-conf:/var/opt/openems/config:rw
      - openems-backend-data:/var/opt/openems/data:rw
    ports:
      - 8079:8079 # Apache-Felix
      - 8081:8081 # Edge-Websocket
      - 8082:8082 # UI-Websocket
    networks:
      - webnet

# ---------- OpenEMS UI ----------
  openems-ui:
    image: openems/ui-backend:latest
    container_name: openems_ui
    hostname: openems_ui
    restart: unless-stopped
    volumes:
      - openems-ui-conf:/etc/nginx:rw
      - openems-ui-log:/var/log/nginx:rw
    environment:
      - WEBSOCKET_HOST=openems_backend
      - WEBSOCKET_PORT=8082
    networks:
      - webnet

volumes:
  openems-backend-conf:
  openems-backend-data:
  openems-ui-conf:
  openems-ui-log:
  
networks:
  webnet:
    driver: bridge

```

Interessant ist noch, dass ChatGPT überzeugt ist, dass der obige Code nicht funktioniert, weil Service-Name (in meinem Fall “openems-backend”) und Websocket (“hier openems\_backend”) nicht zusammenpassen…

Nun, wie dem auch sei, aktuell schaffe ich es mein Backend zu erreichen.
