{"id":13043,"date":"2026-09-16T12:45:00","date_gmt":"2026-09-16T10:45:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=13043"},"modified":"2026-09-09T13:22:38","modified_gmt":"2026-09-09T11:22:38","slug":"tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/","title":{"rendered":"Tutorial: Eine Docker-Compose-Datei f\u00fcr den unbeaufsichtigten Betrieb auf dem Raspberry Pi h\u00e4rten"},"content":{"rendered":"<p>Eine Compose-Datei, die einen Stapel startet, ist in zehn Minuten geschrieben. Eine Compose-Datei, die den Stapel ein Jahr am Laufen h\u00e4lt, braucht etwa sechs Zeilen mehr je Dienst &#8211; und jede dieser Zeilen existiert wegen einer bestimmten Art, auf die Dinge umfallen.<\/p>\n<p>Es folgt der Durchgang in der Reihenfolge, in der sie \u00fcblicherweise n\u00f6tig werden &#8211; was ungef\u00e4hr der Reihenfolge entspricht, in der eine sich selbst \u00fcberlassene Maschine darauf st\u00f6sst.<\/p>\n<figure class=\"lw-diagram\">\n<img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/compose-haerten-de.png\" width=\"1120\" height=\"580\" decoding=\"async\" loading=\"lazy\"\n     alt=\"F\u00fcnf Ausf\u00e4lle \u00fcber neunzig Tage an einer Schiene, je mit der einen Compose-Zeile, die sie verhindert h\u00e4tte, daneben die fertige geh\u00e4rtete Dienstbeschreibung\"><figcaption>Keiner dieser f\u00fcnf F\u00e4lle braucht einen seltenen Umstand. Sie sind das, was neunzig Tage unbeaufsichtigter Betrieb von allein hervorbringt.<\/figcaption><\/figure>\n<h2>Die Zeile, die \u00fcber die R\u00fcckkehr entscheidet<\/h2>\n<p>Ein Container, der stehen bleibt, bleibt stehen. Nach einem Stromausfall, nach einem Absturz, nach einem Neustart des Dienstes &#8211; solange keine Neustartregel etwas anderes sagt.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>services:\n  app:\n    restart: unless-stopped<\/code><\/pre>\n<p>Drei Werte lohnen sich auseinanderzuhalten. <code>no<\/code> ist die Voreinstellung und heisst, dass nichts zur\u00fcckkommt. <code>always<\/code> startet den Container in jedem Fall neu, auch nachdem er von Hand angehalten wurde und die Maschine danach neu startete &#8211; so erscheint ein absichtlich ausser Betrieb genommener Container um drei Uhr nachts wieder. <code>unless-stopped<\/code> tut dasselbe ausser in genau diesem Fall und ist die richtige Voreinstellung f\u00fcr eine Maschine, die niemand beobachtet.<\/p>\n<p>Zwei Einzelheiten dahinter. Docker wartet zwischen Neustartversuchen zunehmend l\u00e4nger, von 100 Millisekunden verdoppelnd bis zu einer Minute &#8211; ein Container in einer Absturzschleife legt die Maschine also nicht lahm, h\u00f6rt aber auch nicht auf, und nichts weist darauf hin. Und die Neustartregel greift nur bei einem Container, der sich beendet. Ein Prozess, der h\u00e4ngt, w\u00e4hrend sein Container weiterl\u00e4uft, ist genau der Fall des n\u00e4chsten Abschnitts.<\/p>\n<h2>Eine Gesundheitspr\u00fcfung, die etwas pr\u00fcft<\/h2>\n<p>Eine h\u00e4ngende Anwendung ist schlimmer als eine abgest\u00fcrzte, denn alles ringsum h\u00e4lt sie f\u00fcr funktionierend. Der Container l\u00e4uft, der Port ist offen, und die Anfragen laufen ins Leere.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>    healthcheck:\n      test: [\"CMD\", \"curl\", \"-fsS\", \"http:\/\/localhost:8080\/health\"]\n      interval: 30s\n      timeout: 5s\n      retries: 3\n      start_period: 60s<\/code><\/pre>\n<p>Die letzte Zeile fehlt am h\u00e4ufigsten und stiftet die meiste Verwirrung. W\u00e4hrend der <code>start_period<\/code> z\u00e4hlt eine fehlgeschlagene Pr\u00fcfung nicht gegen <code>retries<\/code>. Ohne sie wird ein Dienst, der vierzig Sekunden zum Hochkommen braucht, unterwegs f\u00fcr krank erkl\u00e4rt und neu gestartet &#8211; endlos.<\/p>\n<p>Was die Pr\u00fcfung pr\u00fcft, wiegt schwerer als dass es sie gibt. Eine Anfrage auf <code>\/<\/code> belegt, dass der Webserver antwortet, und das tut er auch, w\u00e4hrend die Datenbankverbindung dahinter seit einer Stunde weg ist. Ein Endpunkt, der die ausfallgef\u00e4hrdeten Teile ber\u00fchrt, lohnt sich genau daf\u00fcr zu schreiben &#8211; und er sollte schnell antworten, denn er l\u00e4uft alle dreissig Sekunden, so lange die Maschine steht.<\/p>\n<p>Eine Gesundheitspr\u00fcfung erm\u00f6glicht ausserdem eine Aussage \u00fcber die Reihenfolge, die <code>depends_on<\/code> allein nicht trifft. Ohne die Bedingung startet Compose die Abh\u00e4ngigkeit und macht sofort weiter; mit ihr wartet es.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>  app:\n    depends_on:\n      db:\n        condition: service_healthy<\/code><\/pre>\n<p>Eine Folge f\u00fcr schlanke Abbilder: <code>curl<\/code> ist oft nicht enthalten, und eine Pr\u00fcfung, die sich nicht ausf\u00fchren l\u00e4sst, gilt als fehlgeschlagen. Entweder benutzt die Pr\u00fcfung etwas, das im Abbild vorhanden ist &#8211; <code>wget -q --spider<\/code> oder einen Befehl der Anwendung selbst -, oder das Abbild bekommt ein Paket, das es sonst nicht br\u00e4uchte.<\/p>\n<h2>Protokolle, die die Karte nicht f\u00fcllen<\/h2>\n<p>Der voreingestellte Protokolltreiber schreibt in eine JSON-Datei, die unbegrenzt w\u00e4chst. Auf einem Server mit grosser Platte ist das unordentlich; auf einem Pi mit Speicherkarte ist es ein Ausfallgrund, denn ein volles Dateisystem legt die ganze Maschine still statt nur des geschw\u00e4tzigen Containers.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>    logging:\n      driver: json-file\n      options:\n        max-size: \"10m\"\n        max-file: \"3\"<\/code><\/pre>\n<p>Dreissig Megabyte je Dienst sind f\u00fcr alles reichlich, was nicht gerade untersucht wird. Die Einstellung geh\u00f6rt an jeden Dienst und nicht nur an den geschw\u00e4tzigen, denn der geschw\u00e4tzige ist meist der Dienst, der irgendwann anf\u00e4ngt, jede Sekunde einen Fehlerbericht zu schreiben.<\/p>\n<p>Dieselbe Grenze l\u00e4sst sich einmal f\u00fcr die ganze Maschine in <code>\/etc\/docker\/daemon.json<\/code> setzen, und das ist der bessere Ort daf\u00fcr &#8211; allerdings gilt sie nur f\u00fcr danach erzeugte Container, ein bestehender Stapel muss also neu angelegt werden, damit sie greift.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>{\n  \"log-driver\": \"json-file\",\n  \"log-opts\": { \"max-size\": \"10m\", \"max-file\": \"3\" }\n}<\/code><\/pre>\n<p>Wo nicht der Platz, sondern die Schreibvorg\u00e4nge das Problem sind, gewinnt eine Speicherkarte damit, die Protokolle ganz aus dem Dateisystem zu nehmen &#8211; <code>driver: journald<\/code> reicht sie an systemd weiter, dem sich sagen l\u00e4sst, sie im Arbeitsspeicher zu halten.<\/p>\n<h2>Speichergrenzen und die Pi-eigene Falle<\/h2>\n<p>Eine Maschine mit vier Gigabyte und ohne Auslagerung hat keinen Puffer f\u00fcr ein Leck. Welcher Prozess bei Speichermangel stirbt, entscheidet der Kern &#8211; und es ist regelm\u00e4ssig nicht der verursachende.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>    deploy:\n      resources:\n        limits:\n          memory: 512M\n          cpus: \"1.5\"<\/code><\/pre>\n<p>Eine Grenze macht aus einem Ausfall der ganzen Maschine einen Ausfall eines Containers: Der schuldige Container wird beendet und von seiner Neustartregel wieder gestartet, alles andere l\u00e4uft weiter. Das ist ein deutlich besserer Ausgang, und die Grenze lohnt sich auch dann, wenn die Zahl geraten ist &#8211; eine grossz\u00fcgige Grenze begrenzt den Schaden immer noch.<\/p>\n<p>Und nun der Teil, der den Raspberry Pi allein betrifft. Unter Raspberry Pi OS ist die Speicher-Steuergruppe voreingestellt abgeschaltet, und eine Speichergrenze in der Compose-Datei wird dann klaglos angenommen und bleibt wirkungslos. Eine Warnung erscheint einmal beim Start des Dienstes und danach nie wieder.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code># an die einzige Zeile in \/boot\/firmware\/cmdline.txt anhaengen, dann neu starten\ncgroup_enable=memory cgroup_memory=1\n\n# danach muss diese Zeile verschwunden sein:\ndocker info 2&gt;&amp;1 | grep -i \"no memory limit support\"<\/code><\/pre>\n<p>Die Datei enth\u00e4lt genau eine Zeile, und ein von einem Editor angeh\u00e4ngter Zeilenumbruch macht die Maschine unstartbar &#8211; der Zusatz geh\u00f6rt also an das Ende der bestehenden Zeile, durch ein Leerzeichen getrennt.<\/p>\n<h2>Das Abbild festnageln, damit ein Neustart keine Aktualisierung ist<\/h2>\n<p>Ein Tag ist ein wandernder Zeiger. <code>postgres:16<\/code> bedeutet in diesem Monat etwas anderes als im letzten, und den Zeitpunkt des Wechsels w\u00e4hlt niemand &#8211; er ist der Moment, in dem der Container zuf\u00e4llig neu angelegt wird.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>    image: postgres:16.4@sha256:f8cd4e0b9b0d15b6bbbcbbdf8c5f8c8b6c6b3e9b7cbb4f2d1e3a5c7d9f0b2a46<\/code><\/pre>\n<p>Ein Digest ist unver\u00e4nderlich, und damit wird aus \u201eContainer neu anlegen&#8221; ein Vorgang mit bekanntem Ergebnis. Der Tag bleibt davor stehen, als Dokumentation &#8211; der Digest allein ist unlesbar, und eine Datei voller Pr\u00fcfsummen sagt niemandem, was l\u00e4uft.<\/p>\n<p>Der Digest eines bereits benutzten Abbilds ist einen Befehl entfernt.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>docker image inspect postgres:16.4 --format '{{index .RepoDigests 0}}'<\/code><\/pre>\n<p>Eine Warnung zur Verbindung mit automatischen Aktualisierungen. Ein Werkzeug, das planm\u00e4ssig neue Abbilder holt, und ein fester Digest sind Gegens\u00e4tze &#8211; beides zusammen heisst, dass der Digest stillschweigend gewinnt, w\u00e4hrend das Aktualisierungswerkzeug Erfolg meldet. Entweder wandern die Versionen nach Plan, oder sie wandern, wenn jemand es entscheidet; beides ist vertretbar, eines davon versehentlich zu haben nicht.<\/p>\n<p>Zwei weitere Zeilen geh\u00f6ren in denselben Block und kosten nichts. Ein Container, der nie in sein eigenes Dateisystem schreibt, darf das sagen, und einem, der nicht Wurzel werden muss, l\u00e4sst sich mitteilen, dass er es nie wird.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>    read_only: true\n    tmpfs:\n      - \/tmp\n    security_opt:\n      - no-new-privileges:true\n    user: \"1000:1000\"<\/code><\/pre>\n<h2>Die Datei pr\u00fcfen, bevor sie l\u00e4uft<\/h2>\n<p>Compose l\u00f6st Variablen auf, f\u00fchrt Erg\u00e4nzungsdateien zusammen und setzt Voreinstellungen ein &#8211; und das Ergebnis ist oft nicht das, was die Datei zu sagen scheint. Ein Befehl gibt aus, was tats\u00e4chlich gestartet wird.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>docker compose config<\/code><\/pre>\n<p>Drei Dinge lohnen sich in dieser Ausgabe zu suchen. Ein leerer Wert, wo eine Variable stehen sollte &#8211; eine nicht gesetzte Variable wird ohne Fehlermeldung zur leeren Zeichenkette, und ein fehlendes Passwort liest sich oft als kein Passwort. Ein Abbild ohne Digest. Und ein Dienst ohne <code>restart<\/code>, ohne <code>healthcheck<\/code> oder ohne <code>logging<\/code>, wor\u00fcber das Auge in einer Datei mit acht Diensten leicht hinwegliest.<\/p>\n<p>Das Letzte l\u00e4sst sich maschinell pr\u00fcfen, und das lohnt sich, denn es ist genau die Art von Auslassung, die beim schnellen Hinzuf\u00fcgen eines Dienstes entsteht.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>docker compose config --format json | python3 -c '\nimport json, sys\nstack = json.load(sys.stdin)\nfor name, svc in stack[\"services\"].items():\n    fehlt = [f for f in (\"restart\", \"healthcheck\", \"logging\") if f not in svc]\n    if \"@sha256:\" not in svc.get(\"image\", \"\"):\n        fehlt.append(\"digest\")\n    print(f\"{name:20s} {\\\", \\\".join(fehlt) if fehlt else \\\"ok\\\"}\")\n'<\/code><\/pre>\n<p>Nach dem ersten Lauf geh\u00f6rt eine letzte Pr\u00fcfung zur Routine, und sie braucht kein Werkzeug: die Maschine absichtlich neu starten und ansehen, was zur\u00fcckkommt. Ein Stapel, der noch nie einen Neustart \u00fcberstanden hat, ist nicht gepr\u00fcft &#8211; und der Morgen nach einem Stromausfall ist nicht der Zeitpunkt, das herauszufinden.<\/p>\n<div class=\"lw-quellen\">\n<h2>Quellen<\/h2>\n<ul>\n<li><a href=\"https:\/\/docs.docker.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Docker documentation<\/a><\/li>\n<li><a href=\"https:\/\/www.raspberrypi.com\/documentation\/computers\/raspberry-pi.html\" target=\"_blank\" rel=\"noopener noreferrer\">Raspberry Pi documentation<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Ein Stapel, der l\u00e4uft, ist kein Stapel, der weiterl\u00e4uft. Sechs Zeilen je Dienst entscheiden, ob ein Stromausfall, ein h\u00e4ngender Prozess, eine Logdatei oder ein loser Tag die Maschine lahmlegt &#8211; und auf einem Pi wird eine davon stillschweigend \u00fcbergangen, bis eine Zeile in der Startkonfiguration steht.<\/p>\n","protected":false},"author":1,"featured_media":13232,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[92632],"tags":[92214,92217,92208,92211,92235],"class_list":["post-13043","post","type-post","status-publish","format-standard","hentry","category-tutorials-de-raspberry-pi-de","tag-devops-de","tag-docker-de","tag-raspberry-pi-de","tag-self-hosting-de","tag-tutorial-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: Eine Docker-Compose-Datei f\u00fcr den unbeaufsichtigten Betrieb auf dem Raspberry Pi h\u00e4rten - Lukas Wojcik - Blog<\/title>\n<meta name=\"description\" content=\"Neustartregel, Gesundheitspr\u00fcfung, Logrotation, Speichergrenze und ein fester Digest: die sechs Zeilen f\u00fcr einen Compose-Stapel im Dauerbetrieb.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Eine Docker-Compose-Datei f\u00fcr den unbeaufsichtigten Betrieb auf dem Raspberry Pi h\u00e4rten - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Neustartregel, Gesundheitspr\u00fcfung, Logrotation, Speichergrenze und ein fester Digest: die sechs Zeilen f\u00fcr einen Compose-Stapel im Dauerbetrieb.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-16T10:45:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13043-tutorial-eine-docker-compose-datei-fur-d.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Eine Docker-Compose-Datei f\u00fcr den unbeaufsichtigten Betrieb auf dem Raspberry Pi h\u00e4rten\",\"datePublished\":\"2026-09-16T10:45:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\\\/\"},\"wordCount\":1259,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13043-tutorial-eine-docker-compose-datei-fur-d.png\",\"keywords\":[\"DevOps\",\"Docker\",\"Raspberry Pi\",\"Self-Hosting\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\\\/\",\"name\":\"Tutorial: Eine Docker-Compose-Datei f\u00fcr den unbeaufsichtigten Betrieb auf dem Raspberry Pi h\u00e4rten - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13043-tutorial-eine-docker-compose-datei-fur-d.png\",\"datePublished\":\"2026-09-16T10:45:00+00:00\",\"description\":\"Neustartregel, Gesundheitspr\u00fcfung, Logrotation, Speichergrenze und ein fester Digest: die sechs Zeilen f\u00fcr einen Compose-Stapel im Dauerbetrieb.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13043-tutorial-eine-docker-compose-datei-fur-d.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13043-tutorial-eine-docker-compose-datei-fur-d.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Eine Docker-Compose-Datei f\u00fcr den unbeaufsichtigten Betrieb auf dem Raspberry Pi h\u00e4rten\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/raspberry-pi-de\\\/tutorials-de-raspberry-pi-de\\\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Eine Docker-Compose-Datei f\u00fcr den unbeaufsichtigten Betrieb auf dem Raspberry Pi h\u00e4rten\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tutorial: Eine Docker-Compose-Datei f\u00fcr den unbeaufsichtigten Betrieb auf dem Raspberry Pi h\u00e4rten - Lukas Wojcik - Blog","description":"Neustartregel, Gesundheitspr\u00fcfung, Logrotation, Speichergrenze und ein fester Digest: die sechs Zeilen f\u00fcr einen Compose-Stapel im Dauerbetrieb.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Eine Docker-Compose-Datei f\u00fcr den unbeaufsichtigten Betrieb auf dem Raspberry Pi h\u00e4rten - Lukas Wojcik - Blog","og_description":"Neustartregel, Gesundheitspr\u00fcfung, Logrotation, Speichergrenze und ein fester Digest: die sechs Zeilen f\u00fcr einen Compose-Stapel im Dauerbetrieb.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-16T10:45:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13043-tutorial-eine-docker-compose-datei-fur-d.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Eine Docker-Compose-Datei f\u00fcr den unbeaufsichtigten Betrieb auf dem Raspberry Pi h\u00e4rten","datePublished":"2026-09-16T10:45:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/"},"wordCount":1259,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13043-tutorial-eine-docker-compose-datei-fur-d.png","keywords":["DevOps","Docker","Raspberry Pi","Self-Hosting","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/","name":"Tutorial: Eine Docker-Compose-Datei f\u00fcr den unbeaufsichtigten Betrieb auf dem Raspberry Pi h\u00e4rten - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13043-tutorial-eine-docker-compose-datei-fur-d.png","datePublished":"2026-09-16T10:45:00+00:00","description":"Neustartregel, Gesundheitspr\u00fcfung, Logrotation, Speichergrenze und ein fester Digest: die sechs Zeilen f\u00fcr einen Compose-Stapel im Dauerbetrieb.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13043-tutorial-eine-docker-compose-datei-fur-d.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13043-tutorial-eine-docker-compose-datei-fur-d.png","width":1200,"height":630,"caption":"Tutorial: Eine Docker-Compose-Datei f\u00fcr den unbeaufsichtigten Betrieb auf dem Raspberry Pi h\u00e4rten"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/raspberry-pi-de\/tutorials-de-raspberry-pi-de\/tutorial-eine-docker-compose-datei-fur-den-unbeaufsichtigten-betrieb-auf-dem-raspberry-pi-harten\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Eine Docker-Compose-Datei f\u00fcr den unbeaufsichtigten Betrieb auf dem Raspberry Pi h\u00e4rten"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=13043"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13043\/revisions"}],"predecessor-version":[{"id":17276,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13043\/revisions\/17276"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/13232"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=13043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}