<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.tuxi.ddnss.de/index.php?action=history&amp;feed=atom&amp;title=YAML%3A_Die_Auszeichnungssprache_in_der_Docker-Compose-Welt</id>
	<title>YAML: Die Auszeichnungssprache in der Docker-Compose-Welt - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tuxi.ddnss.de/index.php?action=history&amp;feed=atom&amp;title=YAML%3A_Die_Auszeichnungssprache_in_der_Docker-Compose-Welt"/>
	<link rel="alternate" type="text/html" href="https://wiki.tuxi.ddnss.de/index.php?title=YAML:_Die_Auszeichnungssprache_in_der_Docker-Compose-Welt&amp;action=history"/>
	<updated>2026-06-05T22:24:05Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Tuxipedia</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.tuxi.ddnss.de/index.php?title=YAML:_Die_Auszeichnungssprache_in_der_Docker-Compose-Welt&amp;diff=196&amp;oldid=prev</id>
		<title>Admin: /* Kritik in der Fachwelt */</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxi.ddnss.de/index.php?title=YAML:_Die_Auszeichnungssprache_in_der_Docker-Compose-Welt&amp;diff=196&amp;oldid=prev"/>
		<updated>2026-04-24T12:20:59Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Kritik in der Fachwelt&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 24. April 2026, 12:20 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l67&quot;&gt;Zeile 67:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 67:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;NO&amp;lt;/code&amp;gt; wird in älteren YAML-Parsern automatisch zu &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;NO&amp;lt;/code&amp;gt; wird in älteren YAML-Parsern automatisch zu &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;— was dazu geführt hat dass norwegische Entwickler in Konfigurationsdateien&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;— was dazu geführt hat dass norwegische Entwickler in Konfigurationsdateien&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ihren eigenen Ländercode nicht als String verwenden konnten ohne Anführungszeichen.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ihren eigenen Ländercode nicht als String verwenden konnten ohne Anführungszeichen.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;🤣&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;YAML 1.2 (2009) hat viele dieser Probleme behoben, aber ältere Parser sind&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;YAML 1.2 (2009) hat viele dieser Probleme behoben, aber ältere Parser sind&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff:1.41:old-195:rev-196:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.tuxi.ddnss.de/index.php?title=YAML:_Die_Auszeichnungssprache_in_der_Docker-Compose-Welt&amp;diff=195&amp;oldid=prev</id>
		<title>Admin am 24. April 2026 um 12:06 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxi.ddnss.de/index.php?title=YAML:_Die_Auszeichnungssprache_in_der_Docker-Compose-Welt&amp;diff=195&amp;oldid=prev"/>
		<updated>2026-04-24T12:06:40Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.tuxi.ddnss.de/index.php?title=YAML:_Die_Auszeichnungssprache_in_der_Docker-Compose-Welt&amp;amp;diff=195&amp;amp;oldid=194&quot;&gt;Änderungen zeigen&lt;/a&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.tuxi.ddnss.de/index.php?title=YAML:_Die_Auszeichnungssprache_in_der_Docker-Compose-Welt&amp;diff=194&amp;oldid=prev</id>
		<title>Admin: Die Seite wurde neu angelegt: „== docker-compose.yml — Referenz und Konzepte ==  Dieser Artikel erklärt den Aufbau und die Direktiven einer &lt;code&gt;docker-compose.yml&lt;/code&gt; auf Deutsch. Er richtet sich an alle die Docker Compose produktiv einsetzen und eine kompakte Nachschlageseite in ihrer eigenen Sprache brauchen.  Die offizielle Referenz ist ausschließlich auf Englisch verfügbar: [https://docs.docker.com/compose/compose-file/ docs.docker.com/compose/compose-file]  ----  == YAML…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.tuxi.ddnss.de/index.php?title=YAML:_Die_Auszeichnungssprache_in_der_Docker-Compose-Welt&amp;diff=194&amp;oldid=prev"/>
		<updated>2026-04-24T11:57:00Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „== docker-compose.yml — Referenz und Konzepte ==  Dieser Artikel erklärt den Aufbau und die Direktiven einer &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; auf Deutsch. Er richtet sich an alle die Docker Compose produktiv einsetzen und eine kompakte Nachschlageseite in ihrer eigenen Sprache brauchen.  Die offizielle Referenz ist ausschließlich auf Englisch verfügbar: [https://docs.docker.com/compose/compose-file/ docs.docker.com/compose/compose-file]  ----  == YAML…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== docker-compose.yml — Referenz und Konzepte ==&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel erklärt den Aufbau und die Direktiven einer &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
auf Deutsch. Er richtet sich an alle die Docker Compose produktiv einsetzen und eine&lt;br /&gt;
kompakte Nachschlageseite in ihrer eigenen Sprache brauchen.&lt;br /&gt;
&lt;br /&gt;
Die offizielle Referenz ist ausschließlich auf Englisch verfügbar:&lt;br /&gt;
[https://docs.docker.com/compose/compose-file/ docs.docker.com/compose/compose-file]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== YAML — die Auszeichnungssprache ==&lt;br /&gt;
&lt;br /&gt;
YAML steht für „YAML Ain&amp;#039;t Markup Language&amp;quot; — ein rekursives Akronym, typisch für&lt;br /&gt;
die Open-Source-Welt. Es ist eine Sprache zur Darstellung strukturierter Daten,&lt;br /&gt;
die für Menschen lesbar sein soll.&lt;br /&gt;
&lt;br /&gt;
=== YAML und JSON — Verwandtschaft, kein Dialekt ===&lt;br /&gt;
&lt;br /&gt;
JSON und YAML sind &amp;#039;&amp;#039;&amp;#039;verwandt, aber nicht dasselbe&amp;#039;&amp;#039;&amp;#039;. Der häufige Vergleich&lt;br /&gt;
„YAML ist ein JSON-Dialekt&amp;quot; ist ungenau:&lt;br /&gt;
&lt;br /&gt;
* Jedes gültige JSON ist auch gültiges YAML — YAML ist eine Obermenge von JSON.&lt;br /&gt;
* Umgekehrt gilt das nicht: YAML kann Dinge ausdrücken die JSON nicht kann&lt;br /&gt;
  (Kommentare, mehrzeilige Strings, Anker und Referenzen).&lt;br /&gt;
* Die Syntax ist völlig unterschiedlich: JSON verwendet geschweifte Klammern&lt;br /&gt;
  und Anführungszeichen, YAML verwendet Einrückung und Doppelpunkte.&lt;br /&gt;
&lt;br /&gt;
Dasselbe Datenkonstrukt in beiden Sprachen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;services&amp;quot;: {&lt;br /&gt;
    &amp;quot;nextcloud&amp;quot;: {&lt;br /&gt;
      &amp;quot;image&amp;quot;: &amp;quot;nextcloud:latest&amp;quot;,&lt;br /&gt;
      &amp;quot;restart&amp;quot;: &amp;quot;unless-stopped&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nextcloud:&lt;br /&gt;
    image: nextcloud:latest&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
YAML ist lesbarer — auf Kosten einer strengen Einrückungsregel: &amp;#039;&amp;#039;&amp;#039;Einrückung&lt;br /&gt;
mit Leerzeichen, niemals mit Tabs.&amp;#039;&amp;#039;&amp;#039; Ein falsch gesetzter Tab ist der häufigste&lt;br /&gt;
Fehler in compose-Dateien.&lt;br /&gt;
&lt;br /&gt;
=== Kommentare ===&lt;br /&gt;
&lt;br /&gt;
YAML unterstützt Kommentare mit &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; — JSON nicht.&lt;br /&gt;
Das macht YAML deutlich besser geeignet für Konfigurationsdateien die Menschen&lt;br /&gt;
pflegen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# Dieser Container darf keinen direkten Außenzugriff haben&lt;br /&gt;
ports: []  # keine ports → kein direkter Zugriff von außen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Datentypen ===&lt;br /&gt;
&lt;br /&gt;
YAML erkennt Datentypen automatisch:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Wert !! Typ !! Anmerkung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; || Boolean || Ohne Anführungszeichen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt; || Integer ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;3.14&amp;lt;/code&amp;gt; || Float ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hallo&amp;lt;/code&amp;gt; || String || Ohne Anführungszeichen wenn eindeutig&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;true&amp;quot;&amp;lt;/code&amp;gt; || String || Mit Anführungszeichen erzwungen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; || Null ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Stolperfalle: &amp;lt;code&amp;gt;restart: always&amp;lt;/code&amp;gt; ist ein String. &amp;lt;code&amp;gt;restart: true&amp;lt;/code&amp;gt;&lt;br /&gt;
wäre ein Boolean — und ungültig. Im Zweifel Anführungszeichen setzen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Grundaufbau einer docker-compose.yml ==&lt;br /&gt;
&lt;br /&gt;
Eine &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; besteht aus maximal vier Abschnitten&lt;br /&gt;
auf oberster Ebene:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:      # Pflicht — definiert die Container&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
networks:      # Optional — definiert Netzwerke&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
volumes:       # Optional — definiert persistente Datenspeicher&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
configs:       # Optional — definiert Konfigurationsdateien&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der &amp;lt;code&amp;gt;services&amp;lt;/code&amp;gt;-Abschnitt ist der einzig verpflichtende.&lt;br /&gt;
Alles andere ist optional und wird nur angegeben wenn benötigt.&lt;br /&gt;
&lt;br /&gt;
=== Einrückungsregeln ===&lt;br /&gt;
&lt;br /&gt;
Die Hierarchie wird ausschließlich durch Einrückung ausgedrückt.&lt;br /&gt;
Zwei Leerzeichen pro Ebene sind Konvention:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:           # Ebene 1&lt;br /&gt;
  nextcloud:        # Ebene 2 — Name des Dienstes&lt;br /&gt;
    image: ...      # Ebene 3 — Direktive des Dienstes&lt;br /&gt;
    networks:       # Ebene 3 — Direktive (Liste folgt)&lt;br /&gt;
      - tuxi_net    # Ebene 4 — Listenelement&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Direktiven im services-Abschnitt ==&lt;br /&gt;
&lt;br /&gt;
=== image ===&lt;br /&gt;
&lt;br /&gt;
Das Docker-Image das für den Container verwendet wird.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nextcloud:&lt;br /&gt;
    image: lscr.io/linuxserver/nextcloud:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Format: &amp;lt;code&amp;gt;registry/image:tag&amp;lt;/code&amp;gt;. Ohne Registry wird Docker Hub angenommen.&lt;br /&gt;
Ohne Tag wird &amp;lt;code&amp;gt;latest&amp;lt;/code&amp;gt; angenommen — aber explizit angeben ist besser&lt;br /&gt;
für Reproduzierbarkeit.&lt;br /&gt;
&lt;br /&gt;
=== container_name ===&lt;br /&gt;
&lt;br /&gt;
Fester Name des Containers. Ohne diese Direktive generiert Docker Compose&lt;br /&gt;
einen Namen aus Projektname + Servicename + Nummer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nextcloud:&lt;br /&gt;
    container_name: nextcloud&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig: der Container-Name ist gleichzeitig der Docker-interne DNS-Name&lt;br /&gt;
mit dem andere Container diesen Dienst ansprechen können.&lt;br /&gt;
&lt;br /&gt;
=== restart ===&lt;br /&gt;
&lt;br /&gt;
Neustart-Verhalten des Containers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
restart: unless-stopped&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Wert !! Verhalten&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;no&amp;lt;/code&amp;gt; || Nie neu starten (Standard)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;always&amp;lt;/code&amp;gt; || Immer neu starten, auch nach manuellem Stopp&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;unless-stopped&amp;lt;/code&amp;gt; || Neu starten außer wenn manuell gestoppt — empfohlen für Produktionsdienste&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;on-failure&amp;lt;/code&amp;gt; || Nur neu starten wenn der Container mit Fehlercode endet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== image vs. build ===&lt;br /&gt;
&lt;br /&gt;
Statt ein fertiges Image zu verwenden kann Docker Compose auch selbst eines bauen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  mein-dienst:&lt;br /&gt;
    build:&lt;br /&gt;
      context: ./mein-verzeichnis   # Pfad zum Dockerfile&lt;br /&gt;
      dockerfile: Dockerfile.prod   # optional: anderer Dateiname&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ports ===&lt;br /&gt;
&lt;br /&gt;
Portweiterleitung zwischen Host und Container: &amp;lt;code&amp;gt;HOST:CONTAINER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  caddy:&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;80:80&amp;quot;&lt;br /&gt;
      - &amp;quot;443:443&amp;quot;&lt;br /&gt;
      - &amp;quot;443:443/udp&amp;quot;   # für HTTP/3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wichtig:&amp;#039;&amp;#039;&amp;#039; Wer &amp;lt;code&amp;gt;ports&amp;lt;/code&amp;gt; weglässt, ist nur im Docker-Netzwerk erreichbar —&lt;br /&gt;
nicht von außen. Das ist für interne Dienste wie Datenbanken oder Collabora gewünscht.&lt;br /&gt;
&lt;br /&gt;
=== volumes ===&lt;br /&gt;
&lt;br /&gt;
Einbinden von Verzeichnissen oder benannten Volumes in den Container.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nextcloud:&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./nextcloud/app:/config          # Bind Mount: Host-Pfad → Container-Pfad&lt;br /&gt;
      - /data/nextcloud-data:/data       # absoluter Host-Pfad&lt;br /&gt;
      - caddy_data:/data                 # benanntes Volume (unten definiert)&lt;br /&gt;
&lt;br /&gt;
volumes:&lt;br /&gt;
  caddy_data:                            # benanntes Volume — Docker verwaltet den Speicherort&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Typ !! Syntax !! Wann verwenden&lt;br /&gt;
|-&lt;br /&gt;
| Bind Mount || &amp;lt;code&amp;gt;./host/pfad:/container/pfad&amp;lt;/code&amp;gt; || Wenn du direkten Zugriff auf die Dateien brauchst&lt;br /&gt;
|-&lt;br /&gt;
| Benanntes Volume || &amp;lt;code&amp;gt;volume_name:/container/pfad&amp;lt;/code&amp;gt; || Für Datenbankdaten, Caches — Docker verwaltet den Speicherort&lt;br /&gt;
|-&lt;br /&gt;
| tmpfs || Siehe &amp;lt;code&amp;gt;tmpfs&amp;lt;/code&amp;gt;-Direktive || Flüchtige Daten die nur im RAM leben sollen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== environment ===&lt;br /&gt;
&lt;br /&gt;
Umgebungsvariablen die in den Container übergeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nextcloud:&lt;br /&gt;
    environment:&lt;br /&gt;
      - PUID=1000&lt;br /&gt;
      - PGID=1001&lt;br /&gt;
      - TZ=Europe/Berlin&lt;br /&gt;
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}   # Wert aus .env-Datei&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ als Map-Schreibweise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
    environment:&lt;br /&gt;
      PUID: &amp;quot;1000&amp;quot;&lt;br /&gt;
      TZ: Europe/Berlin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== env_file ===&lt;br /&gt;
&lt;br /&gt;
Umgebungsvariablen aus einer externen Datei laden statt sie in der compose-Datei&lt;br /&gt;
zu hartcodieren — sinnvoll für Passwörter und Secrets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nc-db:&lt;br /&gt;
    env_file:&lt;br /&gt;
      - .env&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;-Datei enthält dann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MYSQL_ROOT_PASSWORD=sehrgeheim&lt;br /&gt;
MYSQL_DATABASE=nextcloud&lt;br /&gt;
MYSQL_USER=ncuser&lt;br /&gt;
MYSQL_PASSWORD=auchhgeheim&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;-Datei gehört in &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; — niemals in ein&lt;br /&gt;
öffentliches Repository einchecken.&lt;br /&gt;
&lt;br /&gt;
=== networks ===&lt;br /&gt;
&lt;br /&gt;
Netzwerkzugehörigkeit des Containers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nextcloud:&lt;br /&gt;
    networks:&lt;br /&gt;
      tuxi_network:&lt;br /&gt;
        ipv4_address: 172.18.0.20   # feste IP (optional)&lt;br /&gt;
&lt;br /&gt;
  collabora:&lt;br /&gt;
    networks: [tuxi_network]        # Kurzschreibweise ohne feste IP&lt;br /&gt;
&lt;br /&gt;
networks:&lt;br /&gt;
  tuxi_network:&lt;br /&gt;
    external: true                  # Netzwerk existiert bereits, nicht neu anlegen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne &amp;lt;code&amp;gt;networks&amp;lt;/code&amp;gt;-Angabe landet der Container im automatisch erstellten&lt;br /&gt;
Default-Netzwerk des Projekts — Container in verschiedenen Projekten können sich&lt;br /&gt;
dann nicht erreichen.&lt;br /&gt;
&lt;br /&gt;
=== extra_hosts ===&lt;br /&gt;
&lt;br /&gt;
Einträge die direkt in die &amp;lt;code&amp;gt;/etc/hosts&amp;lt;/code&amp;gt; des Containers geschrieben werden.&lt;br /&gt;
Überschreibt DNS — wird vor jeder DNS-Anfrage ausgewertet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nextcloud:&lt;br /&gt;
    extra_hosts:&lt;br /&gt;
      - &amp;quot;collabora.beispiel.de:172.18.0.6&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typischer Anwendungsfall: Hairpinning vermeiden — ein Container soll eine Domain&lt;br /&gt;
intern auflösen statt den Umweg über die externe IP zu nehmen.&lt;br /&gt;
Siehe [[Hairpin-NAT – Collabora und Nextcloud hinter Caddy]].&lt;br /&gt;
&lt;br /&gt;
=== depends_on ===&lt;br /&gt;
&lt;br /&gt;
Startreihenfolge und Abhängigkeiten zwischen Diensten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nextcloud:&lt;br /&gt;
    depends_on:&lt;br /&gt;
      db:&lt;br /&gt;
        condition: service_healthy   # wartet bis Healthcheck grün ist&lt;br /&gt;
      redis:&lt;br /&gt;
        condition: service_healthy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! condition !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;service_started&amp;lt;/code&amp;gt; || Container wurde gestartet (Standard — prüft nicht ob er wirklich läuft)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;service_healthy&amp;lt;/code&amp;gt; || Healthcheck des abhängigen Dienstes ist grün&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;service_completed_successfully&amp;lt;/code&amp;gt; || Abhängiger Dienst hat sich mit Exit-Code 0 beendet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== healthcheck ===&lt;br /&gt;
&lt;br /&gt;
Prüft ob der Container wirklich funktioniert — nicht nur ob er läuft.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nc-db:&lt;br /&gt;
    healthcheck:&lt;br /&gt;
      test: [&amp;quot;CMD-SHELL&amp;quot;, &amp;quot;mysqladmin ping -h 127.0.0.1 -u root -p$$MYSQL_ROOT_PASSWORD || exit 1&amp;quot;]&lt;br /&gt;
      interval: 10s      # wie oft prüfen&lt;br /&gt;
      timeout: 5s        # wie lange auf Antwort warten&lt;br /&gt;
      retries: 30        # wie oft wiederholen bevor unhealthy&lt;br /&gt;
      start_period: 30s  # Anlaufzeit bevor Healthcheck zählt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das &amp;lt;code&amp;gt;$$&amp;lt;/code&amp;gt; ist kein Tippfehler — doppeltes Dollar-Zeichen verhindert&lt;br /&gt;
dass Compose die Variable selbst auflöst; sie wird stattdessen an die Shell&lt;br /&gt;
im Container übergeben.&lt;br /&gt;
&lt;br /&gt;
=== tmpfs ===&lt;br /&gt;
&lt;br /&gt;
Flüchtige Dateisysteme die nur im RAM leben und beim Container-Stopp verschwinden.&lt;br /&gt;
Für temporäre Daten, Caches und Security-Härtung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nc-redis:&lt;br /&gt;
    tmpfs:&lt;br /&gt;
      - /data&lt;br /&gt;
      - /tmp&lt;br /&gt;
      - /run&lt;br /&gt;
&lt;br /&gt;
  collabora:&lt;br /&gt;
    tmpfs:&lt;br /&gt;
      - /tmp&lt;br /&gt;
      - /var/tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redis im RAM-only-Modus: schneller, kein Disk-I/O, Daten gehen beim Neustart verloren —&lt;br /&gt;
für Session-Caches gewünscht.&lt;br /&gt;
&lt;br /&gt;
=== dns ===&lt;br /&gt;
&lt;br /&gt;
DNS-Server die der Container verwenden soll statt des Docker-Defaults.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nextcloud:&lt;br /&gt;
    dns:&lt;br /&gt;
      - 1.1.1.1    # Cloudflare&lt;br /&gt;
      - 9.9.9.9    # Quad9&lt;br /&gt;
      - 8.8.8.8    # Google&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== command ===&lt;br /&gt;
&lt;br /&gt;
Überschreibt den Standard-Startbefehl des Images.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nc-db:&lt;br /&gt;
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== security_opt und cap_drop / cap_add ===&lt;br /&gt;
&lt;br /&gt;
Container-Härtung: Linux-Capabilities entziehen oder hinzufügen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nc-redis:&lt;br /&gt;
    security_opt:&lt;br /&gt;
      - no-new-privileges:true   # verhindert Privilege Escalation&lt;br /&gt;
    cap_drop:&lt;br /&gt;
      - ALL                      # alle Capabilities entziehen&lt;br /&gt;
    cap_add:&lt;br /&gt;
      - NET_BIND_SERVICE         # nur diese eine wieder erlauben (z.B. für Ports &amp;lt;1024)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Faustregel aus dem Kommentarteil deiner compose-Datei:&lt;br /&gt;
* &amp;lt;code&amp;gt;no-new-privileges: true&amp;lt;/code&amp;gt; — immer möglich, immer gut&lt;br /&gt;
* &amp;lt;code&amp;gt;cap_drop: ALL&amp;lt;/code&amp;gt; — wo immer es geht&lt;br /&gt;
* &amp;lt;code&amp;gt;read_only: true&amp;lt;/code&amp;gt; — nur bei schlanken Services ohne viele Schreibpfade&lt;br /&gt;
&lt;br /&gt;
=== read_only ===&lt;br /&gt;
&lt;br /&gt;
Container-Dateisystem schreibgeschützt — kombiniert mit &amp;lt;code&amp;gt;tmpfs&amp;lt;/code&amp;gt; für&lt;br /&gt;
Verzeichnisse die Schreibzugriff benötigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  nc-redis:&lt;br /&gt;
    read_only: true&lt;br /&gt;
    tmpfs:&lt;br /&gt;
      - /data&lt;br /&gt;
      - /tmp&lt;br /&gt;
      - /run&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Der networks-Abschnitt ==&lt;br /&gt;
&lt;br /&gt;
=== Externes Netzwerk verwenden ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
networks:&lt;br /&gt;
  tuxi_network:&lt;br /&gt;
    external: true   # Netzwerk wurde bereits mit docker network create angelegt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Neues Netzwerk anlegen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
networks:&lt;br /&gt;
  mein_netzwerk:&lt;br /&gt;
    driver: bridge&lt;br /&gt;
    ipam:&lt;br /&gt;
      config:&lt;br /&gt;
        - subnet: 172.20.0.0/16&lt;br /&gt;
          gateway: 172.20.0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Der volumes-Abschnitt ==&lt;br /&gt;
&lt;br /&gt;
=== Benanntes Volume ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
volumes:&lt;br /&gt;
  caddy_data:      # Docker verwaltet den Speicherort unter /var/lib/docker/volumes/&lt;br /&gt;
  caddy_config:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Volume mit tmpfs-Treiber (RAM-Disk) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
volumes:&lt;br /&gt;
  cool-child-roots:&lt;br /&gt;
    driver_opts:&lt;br /&gt;
      type: tmpfs&lt;br /&gt;
      device: tmpfs&lt;br /&gt;
      o: &amp;quot;size=4g,mode=1777&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Nützliche CLI-Befehle ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Befehl !! Was er tut&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker compose up -d&amp;lt;/code&amp;gt; || Alle Dienste im Hintergrund starten&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker compose down&amp;lt;/code&amp;gt; || Alle Dienste stoppen und Container entfernen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker compose restart&amp;lt;/code&amp;gt; || Alle Dienste neu starten&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker compose restart caddy&amp;lt;/code&amp;gt; || Nur einen Dienst neu starten&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker compose up -d --force-recreate nextcloud&amp;lt;/code&amp;gt; || Einen Container neu erstellen (bei Konfigurationsänderungen)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker compose logs -f nextcloud&amp;lt;/code&amp;gt; || Log eines Dienstes live verfolgen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker compose ps&amp;lt;/code&amp;gt; || Status aller Dienste anzeigen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker compose exec nextcloud bash&amp;lt;/code&amp;gt; || Shell in laufendem Container öffnen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker compose pull&amp;lt;/code&amp;gt; || Alle Images aktualisieren&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Häufige Fehler ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fehler !! Ursache !! Fix&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;yaml: line X: found character that cannot start any token&amp;lt;/code&amp;gt; || Tab statt Leerzeichen zur Einrückung || Alle Tabs durch Leerzeichen ersetzen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Address already in use&amp;lt;/code&amp;gt; || Feste IP bereits von anderem Container belegt || &amp;lt;code&amp;gt;docker network inspect&amp;lt;/code&amp;gt; → Schuldigen finden&lt;br /&gt;
|-&lt;br /&gt;
| Container startet, aber Dienst funktioniert nicht || &amp;lt;code&amp;gt;depends_on&amp;lt;/code&amp;gt; ohne &amp;lt;code&amp;gt;condition: service_healthy&amp;lt;/code&amp;gt; || Healthcheck ergänzen und &amp;lt;code&amp;gt;service_healthy&amp;lt;/code&amp;gt; verwenden&lt;br /&gt;
|-&lt;br /&gt;
| Umgebungsvariable leer obwohl in &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; gesetzt || &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; liegt nicht im selben Verzeichnis wie die compose-Datei || Pfad prüfen oder &amp;lt;code&amp;gt;env_file&amp;lt;/code&amp;gt; explizit angeben&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;$$VARIABLE&amp;lt;/code&amp;gt; wird nicht aufgelöst || Gewolltes Verhalten — &amp;lt;code&amp;gt;$$&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt; und an die Shell übergeben || Für Shell-Variablen im Container: &amp;lt;code&amp;gt;$$&amp;lt;/code&amp;gt; verwenden. Für Compose-Variablen: &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Webserver, Reverse Proxy und Container – wie die Schichten zusammenspielen]]&lt;br /&gt;
* [[Docker-Netzwerke und Container-IPs — Konfiguration und Fallstricke]]&lt;br /&gt;
* [[Hairpin-NAT – Collabora und Nextcloud hinter Caddy]]&lt;br /&gt;
* [https://docs.docker.com/compose/compose-file/ Offizielle Compose-Referenz (englisch)]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Docker]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>