Die Docker-Doku von FreshRSS zeigt zum Einstieg einen einzigen Befehl. Er geht über acht Zeilen, jede endet mit einem Backslash, und dazwischen stehen ein Port, eine Zeitzone, ein Zeitplan, zwei Speicherorte, ein Name und ein Image. Wer ihn abtippt, bekommt einen laufenden Feed-Reader. Wer ihn eine Woche später ändern will, sucht erst mal in der Shell-History, wie er damals genau lautete.

Docker Compose ist die Antwort auf dieses Suchen. Derselbe Befehl wird eine Datei, die im Ordner liegt, die man lesen und ändern kann, und die mit einem einzigen docker compose up -d zum laufenden Dienst wird. Fast jede Anleitung auf dieser Seite endet in so einer Datei. Diese hier erklärt sie einmal von vorn: Zeile für Zeile, an einem Dienst, der klein genug ist, dass die Datei nicht ablenkt.

Kurz gesagt: Am Ende läuft FreshRSS, ein Feed-Reader, als Container auf deinem Linux-Rechner, und du kannst jede Zeile der Compose-Datei erklären, die ihn gestartet hat: Image, Port, Volume, Umgebungsvariable, Neustart-Regel. Dazu die fünf Befehle, mit denen du jeden Compose-Dienst startest, beobachtest, stoppst und aktualisierst. Dauer: rund 30 Minuten, inklusive Docker-Installation. Stufe: Einsteiger, normale PC-Kenntnisse reichen, alles Weitere wird erklärt. Stand: Docker Compose v5.5.1 (Docker 29.8.1), FreshRSS 1.30.0, geprüft am 22-09-2026.
Schaubild: Docker Compose in drei Schritten: compose.yaml mit Image, Port, Volume, Zeitzone und Neustart-Regel schreiben, mit docker compose up -d starten und mit ps und logs prüfen, FreshRSS auf Port 8080 im Browser einrichten
Der ganze Weg auf einen Blick: Datei schreiben, Container starten, im Browser einrichten.

Was Docker Compose ist

Docker packt ein Programm samt allem, was es zum Laufen braucht, in ein Image: ein fertiges Paket, das jemand anders gebaut und auf einen öffentlichen Server gelegt hat, den Docker Hub. Aus dem Image macht Docker auf deinem Rechner einen Container, das laufende Programm in seinem eigenen kleinen Zimmer, mit eigener Netzwerkadresse und eigenem Dateisystem. Das Image ist die Backmischung, der Container der Kuchen.

Damit der Kuchen brauchbar wird, muss Docker ein paar Dinge wissen: Über welchen Port darfst du von außen an das Zimmer klopfen? Wo sollen die Daten hin, die den Container überleben sollen? Welche Zeitzone gilt drinnen? Und was passiert, wenn der Rechner neu startet? Beim docker run-Befehl stehen die Antworten als Optionen hintereinander. Bei Compose stehen sie in einer Datei, und der Befehl bleibt immer derselbe.

Browser→ Port 8080 →FreshRSS-Container→ schreibt in →Volume freshrss_data

Die Datei heißt compose.yaml. Die Docker-Doku nennt diesen Namen ausdrücklich den bevorzugten; docker-compose.yml aus älteren Anleitungen versteht Compose weiterhin, und liegen beide im Ordner, gewinnt compose.yaml. Ich nehme den neuen Namen, weil er die Tutorials von 2019 sauber von den heutigen trennt. In denselben alten Tutorials steht ganz oben eine Zeile version: "3". Die ist laut Doku überholt und wird nur noch mit einer Warnung quittiert. Weglassen.

Compose ist seit Version 2 ein Teil von Docker selbst und wird als docker compose mit Leerzeichen aufgerufen. Das ältere docker-compose mit Bindestrich war ein eigenes Programm, das nicht mehr gepflegt wird. Meldet dein Rechner nur den Bindestrich, ist das die alte Version 1, und dann lohnt der Weg über Schritt 1 unten, weil das offizielle Installationsskript die aktuelle mitbringt.

Was du brauchst

  • Einen Rechner mit Debian oder Ubuntu, auf dem du ein Terminal öffnen kannst. Das kann ein alter Büro-PC sein, ein Raspberry Pi oder eine VM. Docker gibt es für amd64 und arm64; das FreshRSS-Image ebenso, plus arm/v7 für ältere Pis.
  • Ein Konto auf diesem Rechner, das sudo darf, also Befehle mit Verwaltungsrechten ausführen. Beim ersten Benutzer einer Debian- oder Ubuntu-Installation ist das meist der Fall.
  • Port 8080 frei. Prüfen wir gleich.
  • Einen Browser auf einem Gerät im selben Netz, und sei es derselbe Rechner.
So liest du diese Anleitung: Alles, was du selbst tun sollst, steht in einem farbigen Kasten. [ per klick ] heißt: Das erledigst du mit der Maus in einer Web-Oberfläche, hier dem Einrichtungsassistenten und der Oberfläche von FreshRSS im Browser. [ über die shell ] heißt: Den Befehl kopieren, ins Terminal einfügen, Enter. Stehen beide Kästen direkt untereinander, führen sie zum selben Ergebnis. Du gehst EINEN davon, nicht beide.

Alle Befehle rechnen mit denselben Beispielwerten. Wo sie unten auftauchen, setzt du deine ein:

  • IP-Adresse des Docker-Rechners: 192.168.178.40
  • Ordner für die Compose-Datei: ~/freshrss (das ~ steht für dein Home-Verzeichnis)
  • Port der Weboberfläche: 8080
  • Zeitzone: Europe/Berlin
  • Erster Benutzer in FreshRSS: sakis
  • Sein Passwort: Leseecke-2026 als Platzhalter; du nimmst ein eigenes, langes

Schritt 1: Docker prüfen oder installieren

Zuerst die Frage, ob Docker schon da ist. Öffne ein Terminal auf dem Rechner, das schwarze Fenster, in das man Befehle tippt; steht der Rechner ohne Bildschirm im Keller, verbindest du dich von deinem PC aus per SSH, das ist ein Terminal über das Netzwerk. Dann:

docker --version
docker compose version
Docker version 29.8.1, build 4a63305
Docker Compose version v5.5.1

Stehen da zwei Versionsnummern, springst du zu Schritt 2. Steht da docker: command not found, fehlt Docker, und du installierst es mit dem Skript, das Docker selbst für diesen Zweck anbietet. Das Skript erkennt deine Distribution, richtet die Paketquelle von Docker ein und installiert Docker samt Compose-Plugin. Die Doku warnt, dass es nur für frische Installationen gedacht ist und keine bestehende aktualisiert; genau das ist hier der Fall.

Skript herunterladen und ausführen; das zweite Kommando fragt nach deinem Passwort:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Dann dein Konto in die Gruppe docker aufnehmen, damit du die Befehle ohne sudo tippen kannst:

sudo usermod -aG docker $USER

Die Gruppenmitgliedschaft gilt erst nach neuer Anmeldung: Terminal schließen, neu öffnen (bei SSH: Verbindung trennen und neu aufbauen). Danach die Probe:

docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

Ein Satz zur Gruppe docker, weil die Doku ihn auch sagt: Wer in dieser Gruppe ist, kann über Docker alles auf dem Rechner tun, was Root kann. Für deinen eigenen Rechner zu Hause ist das in Ordnung; auf einem Server, den sich mehrere Leute teilen, würde ich es mir überlegen.

Bleibt der Port. FreshRSS bekommt gleich Port 8080, und der ist auf Bastelrechnern beliebt. Der Befehl darf nichts außer der Meldung ausgeben:

sudo ss -tulpn | grep ':8080 ' || echo "Port 8080 ist frei"
Port 8080 ist frei

Kommt stattdessen eine Zeile mit einem Programmnamen, sitzt dort schon jemand. Wer das ist und wie du ihn wegbekommst, steht in einem eigenen Beitrag; oder du gibst FreshRSS in Schritt 2 einen anderen Port, das ist eine Zahl in der Datei.

Schritt 2: Die Compose-Datei

Jeder Compose-Dienst bekommt einen eigenen Ordner. Der Name des Ordners ist nicht Deko: Compose nennt das Ganze ein Projekt und leitet den Projektnamen aus dem Ordnernamen ab, und mit dem Projektnamen werden gleich die Speicherbereiche benannt. Zwei Dienste im selben Ordner kämen sich in die Quere.

Ordner anlegen und hineinwechseln:

mkdir -p ~/freshrss
cd ~/freshrss

Datei anlegen; nano ist ein Texteditor fürs Terminal:

nano compose.yaml

Inhalt einfügen, mit Strg+O und Enter speichern, mit Strg+X schließen. Die Einrückung mit zwei Leerzeichen ist Teil der Datei, nicht Deko:

services:
  freshrss:
    image: freshrss/freshrss:latest
    container_name: freshrss
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - data:/var/www/FreshRSS/data
      - extensions:/var/www/FreshRSS/extensions
    environment:
      TZ: Europe/Berlin
      CRON_MIN: '2,32'

volumes:
  data:
  extensions:

Ob Compose die Datei versteht, prüfst du vor dem Start:

docker compose config --quiet && echo "Datei in Ordnung"
Datei in Ordnung

Die Datei ist die aus der Docker-Doku von FreshRSS, um zwei Zeilen erleichtert, die nur für Entwickler gedacht sind, und mit deutscher Zeitzone. Sie ist im Sandkasten dieser Seite gelaufen, bevor sie hier steht. Jetzt das Wichtigste dieser Anleitung: was jede Zeile tut.

ZeileWas sie tut
services:Die Liste der Dienste. Jeder Dienst wird ein Container. Hier ist es einer; bei Paperless-ngx sind es zwei, bei Immich vier, das Prinzip bleibt.
freshrss:Der Name des Dienstes. Frei wählbar; mit ihm sprichst du den Dienst in Befehlen an, etwa docker compose logs freshrss.
image:Welches Paket vom Docker Hub geladen wird. Vor dem Doppelpunkt der Name, dahinter der Tag, die gewünschte Ausgabe. latest ist bei FreshRSS die letzte stabile Version; 1.30.0 wäre genau diese, und edge der tägliche Entwicklungsstand.
container_name:Wie der Container heißen soll. Ohne die Zeile nennt Compose ihn nach dem Muster Projekt-Dienst-Nummer, also freshrss-freshrss-1. Mit der Zeile heißt er kurz freshrss, und so taucht er in docker ps auf.
restart:Was Docker tut, wenn der Container stehen bleibt. unless-stopped heißt laut Doku: immer neu starten, auch nach einem Neustart des Rechners, außer du hast ihn selbst gestoppt. Der Standard wäre no, und dann bleibt FreshRSS nach dem nächsten Stromausfall liegen.
ports:Die Tür nach außen, als AUSSEN:INNEN. FreshRSS lauscht im Container auf Port 80; von deinem Rechner aus erreichst du ihn über 8080. Nur die erste Zahl ist deine. Ist 8080 belegt, schreibst du "8090:80", die 80 bleibt.
volumes: (im Dienst)Was den Container überleben soll. Alles, was FreshRSS nach /var/www/FreshRSS/data schreibt, Datenbank, Konten, Feeds, landet im Volume data; Erweiterungen im zweiten. Ohne diese Zeilen wäre nach jedem Update alles weg.
environment:Einstellungen, die dem Programm im Container als Umgebungsvariablen mitgegeben werden, Zettel an der Tür. TZ setzt die Zeitzone. CRON_MIN sagt FreshRSS, zu welchen Minuten jeder Stunde es die Feeds neu lädt; ohne die Zeile lädt es laut Doku gar nicht automatisch.
volumes: (ganz unten)Die Anmeldung der beiden Volumes bei Docker. Der leere Doppelpunkt heißt: Standardeinstellungen, Docker verwaltet den Speicherort selbst.

Ein Wort zu den Volumes, weil sie Einsteiger am meisten verwirren. Es gibt zwei Arten, einem Container einen dauerhaften Speicherort zu geben. Die eine ist ein Bind Mount: Du nennst einen Ordner auf deinem Rechner, etwa ./data:/var/www/FreshRSS/data, und der Container schreibt direkt hinein; du siehst die Dateien im Dateimanager. Die andere ist das benannte Volume wie hier: Docker legt den Ordner selbst an, unter /var/lib/docker/volumes/, und kümmert sich um die Rechte. FreshRSS nutzt in seinen Docker-Beispielen durchgehend die zweite Form, und für den ersten Dienst ist sie die entspanntere, weil die Frage „welcher Benutzer darf in diesen Ordner schreiben" gar nicht erst aufkommt. Der Preis ist, dass du für ein Backup einmal mehr nachsehen musst, wo die Daten liegen. Das machen wir am Ende.

Schritt 3: Starten und zusehen

Der eine Befehl. Er lädt das Image herunter, legt die Volumes an, baut den Container und startet ihn; -d steht für detached, im Hintergrund, damit du das Terminal zurückbekommst.

docker compose up -d
[+] Running 4/4
 ✔ Network freshrss_default       Created
 ✔ Volume "freshrss_data"         Created
 ✔ Volume "freshrss_extensions"   Created
 ✔ Container freshrss             Started

Vier Häkchen, und in den Namen steckt der Projektname aus dem Ordner: freshrss_data, nicht data. Ein eigenes Netz hat Compose auch angelegt, ohne dass es in der Datei stand; das bekommt jedes Projekt, und mehrere Container im selben Projekt reden darüber miteinander. Dann die Frage, ob der Container auch läuft und nicht nur gestartet wurde:

docker compose ps
NAME       IMAGE                      COMMAND                  SERVICE    CREATED                  STATUS                  PORTS
freshrss   freshrss/freshrss:latest   "./Docker/entrypoint…"   freshrss   Less than a second ago   Up Less than a second   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp

Die Spalte STATUS ist die, die zählt. Up mit einer Zeit heißt: läuft. Stünde dort Restarting, würde der Container in einer Schleife abstürzen und neu starten, und dann will man wissen, warum. Dafür gibt es die Logs, das ist alles, was das Programm im Container auf seine Konsole schreibt:

docker compose logs --tail 20

Die letzten zwanzig Zeilen; bei FreshRSS sind es Apache-Meldungen, die nichts Schlimmes sagen sollten. Mit -f statt --tail 20 bleibt die Ausgabe offen und zeigt neue Zeilen, sobald sie kommen, bis du mit Strg+C aussteigst. Das ist der Befehl, den du bei jedem künftigen Problem als Erstes tippst, egal bei welchem Container.

Schritt 4: FreshRSS im Browser einrichten

Der Container läuft, aber FreshRSS weiß noch nicht, wem er gehört. Das klärt ein Assistent in fünf Seiten.

Im Browser http://192.168.178.40:8080 öffnen (Stand FreshRSS 1.30.0). Der Assistent leitet dich auf seine erste Seite um:

  1. Sprache: Deutsch wählen, dann Speichern.
  2. Überprüfungen: eine Liste, ob PHP-Module und Schreibrechte passen. Im Docker-Image ist alles grün. Zum nächsten Schritt springen.
  3. Datenbank: bei Datenbank-Typ bleibt SQLite stehen, das ist die Voreinstellung; die Felder für Host und Passwort verschwinden damit. Speichern.
  4. Standardbenutzer: bei Benutzername des Standardbenutzers sakis eintragen, bei Authentifizierungsmethode bleibt Webformular (traditionell, benötigt JavaScript), darunter das Passwort, mindestens sieben Zeichen. Speichern.
  5. Die Meldung Der Installationsvorgang war erfolgreich. Auf Installation fertigstellen klicken.

Danach die Anmeldeseite: Benutzername sakis, dein Passwort. Die Startseite ist danach nicht leer: FreshRSS hat seinen eigenen Release-Feed schon abonniert.

Erste Seite des FreshRSS-Assistenten: Auswahlfeld Sprache steht auf Deutsch, darunter der Knopf Speichern.
(1) Deutsch wählen; (2) Hier klicken
Dritte Seite des FreshRSS-Assistenten: Datenbank-Typ steht auf SQLite, darunter der Knopf Speichern.
(1) SQLite stehen lassen; (2) Hier klicken
Vierte Seite des FreshRSS-Assistenten: Benutzername sakis eingetragen, Authentifizierungsmethode Webformular, Passwortfeld gefüllt, darunter der Knopf Speichern.
(1) Benutzername: sakis; (2) Passwort eintragen; (3) Hier klicken

SQLite ist eine Datenbank, die aus einer einzigen Datei besteht und ohne eigenen Server auskommt; sie liegt im Volume data. Für einen Haushalt, der Nachrichten liest, reicht sie vollkommen. Der Benutzer, den du gerade angelegt hast, ist der Administrator dieser Installation; weitere Benutzer legt er später unter Administration an.

Der Beweis, dass alles zusammenspielt, ist ein erster Feed. Der von dieser Seite bietet sich an, aber jeder andere tut es auch:

Links in der Seitenleiste oben Abonnementverwaltung, dort Feed hinzufügen. Bei Feed-URL https://sakis.tech/rss/ eintragen und mit Hinzufügen bestätigen. Danach zeigt FreshRSS die Einstellungsseite des neuen Feeds, der ist dabei schon abgerufen; links oben führt Zurück zu Ihren RSS-Feeds zur Startseite. Dort Feeds aktualisieren klicken: rechts in der Werkzeugleiste ist das nur ein Pfeil-Symbol, der Name erscheint beim Darüberfahren.

Die Abonnementverwaltung von FreshRSS mit der Kategorie Unkategorisiert und dem Link Feed hinzufügen.
Hier klicken
Das Formular Feed hinzufügen in FreshRSS: im Feld Feed-URL steht https://sakis.tech/rss/, darunter der Knopf Hinzufügen.
(1) Feed-URL: https://sakis.tech/rss/; (2) Hier klicken
Die Startseite von FreshRSS: in der Liste die neuesten Beiträge von Sakis.Tech, oben rechts in der Werkzeugleiste das Pfeil-Symbol Feeds aktualisieren.
Feeds aktualisieren

Erscheinen die letzten Beiträge in der Liste, hast du gerade den ganzen Weg gesehen: Browser, Port 8080, Container, Volume. Und FreshRSS holt die Feeds ab jetzt zweimal die Stunde von selbst, zu den Minuten 2 und 32, weil das in CRON_MIN steht.

Die fünf Befehle, die du behältst

Alles, was du bis hier getippt hast, gilt für jeden Compose-Dienst, nicht nur für FreshRSS. Immer im Ordner mit der compose.yaml, also nach einem cd ~/freshrss:

Starten (oder nach einer Änderung an der Datei: neu bauen; Compose merkt selbst, ob sich etwas geändert hat):

docker compose up -d

Nachsehen, ob es läuft:

docker compose ps

Zusehen, was drinnen passiert; Strg+C beendet das Zusehen, nicht den Container:

docker compose logs -f

Stoppen und aufräumen. Entfernt Container und Netz, die Volumes mit deinen Daten bleiben:

docker compose down

Aktualisieren: neues Image holen, dann Container mit dem neuen Image neu bauen. Die Volumes bleiben eingehängt:

docker compose pull
docker compose up -d

Zu down gehört eine Warnung, und sie ist der Grund, warum ich das Wort Volume oben so lange erklärt habe. docker compose down lässt die Volumes in Ruhe, das steht so in der Doku. docker compose down -v löscht sie mit, und damit Datenbank, Konten und Feeds. Der Buchstabe ist der Unterschied zwischen „kurz aus" und „alles weg". Man tippt ihn genau einmal versehentlich. Ich erwähne das Backup deshalb jetzt schon und nicht erst am Ende.

Was am Ende eingestellt ist

  1. Ein Konto, und das ist der Admin. Anmeldung per Webformular, Passwort in der SQLite-Datei im Volume. Wer FreshRSS mit der Familie teilt, legt unter Administration weitere Benutzer an, statt das eine Passwort herumzugeben.
  2. Port 8080 ist im ganzen Heimnetz offen. In docker compose ps steht 0.0.0.0:8080, und das heißt: auf allen Adressen des Rechners. Jeder im WLAN sieht die Anmeldeseite. Aus dem Internet sieht sie niemand, solange du im Router keinen Port freigibst, und das würde ich für einen Dienst ohne HTTPS auch nicht tun. Wenn irgendwann ein Reverse Proxy davor steht, änderst du die Zeile in "127.0.0.1:8080:80"; dann nimmt nur noch der Proxy auf demselben Rechner ab. Auch das ist eine Zeile in der Datei und ein up -d.
  3. Feeds laden alle 30 Minuten. Wer es häufiger will, trägt bei CRON_MIN mehr Minuten ein, etwa '2,17,32,47'. Häufiger als alle 15 Minuten ist gegenüber den Seiten, die du liest, unhöflich und bringt nichts; die meisten Blogs schreiben nicht viermal die Stunde.
  4. Updates macht niemand für dich. Mit dem Tag latest bekommst du bei jedem pull die neueste stabile Version, aber den pull tippst du selbst. Einmal im Monat ist ein guter Rhythmus, und vorher einen Blick in die Release Notes; FreshRSS schreibt dort, wenn etwas bricht. Bei 1.30.0 stand so etwas drin, dazu gleich mehr.
  5. Das Backup liegt in Dockers Ordner. Wo genau, verrät docker volume inspect freshrss_data in der Zeile Mountpoint, und weil der Ordner Root gehört, brauchst du sudo, um ihn zu kopieren. Stoppe den Container vorher mit down, damit die Datenbank nicht mitten im Schreiben kopiert wird. Wie das für alle Volumes auf einmal und regelmäßig geht, ist ein eigener Beitrag; der ist vorgemerkt.
  6. Die Logs wachsen ungebremst. Docker hebt alles auf, was der Container auf die Konsole schreibt, und begrenzt das nicht von selbst. Die offizielle FreshRSS-Datei hat dafür einen Block logging: mit max-size: 10m; wer den Dienst monatelang laufen lässt, nimmt ihn dazu. Für die ersten Wochen ist es egal.

Wo es klemmt

Warnung wegen version. Steht in einer kopierten Datei die Zeile version: "3", meldet Compose beim Start, das Attribut sei überholt und werde ignoriert. Es ist eine Warnung, kein Fehler, aber die Zeile ist ein Zeichen, dass das Tutorial älter ist als der Rest deiner Installation. Löschen.

Fehler mit Zeilennummer beim config oder up. Fast immer die Einrückung. YAML zählt Leerzeichen, ein Tabulator gilt nicht, und ports: muss genau zwei Leerzeichen tiefer stehen als freshrss:. Vergleiche die genannte Zeile mit der Datei oben; das Lesen der Fehlermeldung übernimmt docker compose config, das die Datei nur prüft, ohne etwas zu starten.

Bind for 0.0.0.0:8080 failed: port is already allocated. Ein anderer Container oder ein anderes Programm hat den Port. Entweder den Port in der Datei ändern, oder herausfinden, wer ihn hält.

permission denied while trying to connect to the Docker daemon socket. Dein Konto ist noch nicht in der Gruppe docker, oder du hast dich nach dem usermod nicht neu angemeldet. Abmelden, anmelden, noch mal. Solange gehen die Befehle auch mit sudo davor.

docker-compose: command not found. Die Anleitung, aus der der Befehl stammt, meint die alte Version 1. Bindestrich durch Leerzeichen ersetzen, der Rest des Befehls bleibt gleich.

FreshRSS nimmt einen Feed aus dem Heimnetz nicht an. Seit 1.30.0 blockiert FreshRSS Adressen aus lokalen Netzen standardmäßig; die Standardkonfiguration nennt 127.0.0.1 und die privaten Bereiche 10.0.0.0/8, 172.16.0.0/12 und 192.168.0.0/16, also auch dein Heimnetz. Das Changelog nennt es als absichtlichen Bruch, um sogenannte SSRF-Angriffe zu erschweren, bei denen ein Angreifer den Reader als Sprungbrett ins interne Netz nutzt. Wer einen Feed von seinem eigenen Server abonnieren will, etwa von einer Gitea-Instanz, trägt dessen Adresse laut Changelog in der Systemkonfiguration oder über die Umgebungsvariable INTERNAL_HOST_ALLOWLIST ein. Dass ein Projekt dieser Größe so einen Bruch in Kauf nimmt und ihn in den Release Notes als Erstes nennt, ist das Verhalten, das ich mir von Software wünsche.

Die Datei ist jetzt keine Zauberformel mehr. Wenn du das nächste Mal eine compose.yaml auf dieser Seite siehst, bei n8n oder Jellyfin, wirst du jede Zeile einer der neun aus der Tabelle zuordnen können, und die zwei oder drei neuen erklärt der jeweilige Beitrag. Welcher Dienst ist bei dir der erste, der in einen Ordner mit einer compose.yaml zieht, und welche Zeile war die, an der es gehakt hat? Ab damit in die Kommentare.

Wenn dir eine solche Erklärung von vorn öfter fehlt, bei DNS, beim Reverse Proxy, bei Containern gegen VMs, dann ist der Newsletter der Ort, an dem du diese Grundlagen-Beiträge nicht verpasst.

Quellen