README: Netz-Namen fuer readarchive-stack erklaert
Das docker-compose.yml des Haupt-Stacks deklariert kein Netz - Compose legt <projektname>_default selbst an. Bei Portainer ist der Projektname der Stack-Name, der in readarchive-stack.yml eingetragene Wert noisesensors_default passt also nur, wenn das Stack auch so heisst. Sonst bricht der Lauf mit "declared as external, but could not be found" ab. Dazu als Option das Umbenennen des Default-Netzes (fester Name, unabhaengig vom Stack-Namen) und der Hinweis, dass ein networks: an einem Service dessen automatische Zuordnung aufhebt - wer dort etwas eintraegt, muss default mit auffuehren. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -95,7 +95,27 @@ Im **Portainer** als eigenes Stack anlegen (Inhalt von `readarchive-stack.yml`)
|
||||
|
||||
*Deploy the stack* startet den Lauf, der Container endet danach und bleibt als „Exited" stehen. Für den nächsten Zeitraum nur die Variablen ändern und *Update the stack*. Der Haupt-Stack wird dabei nicht angefasst.
|
||||
|
||||
Beide Wege brauchen das Netz des laufenden Haupt-Stacks (`<stack-name>_default`, in `readarchive-stack.yml` als `external` eingetragen) sowie dieselben Zugangsdaten und `LOCALDIR` — auf der Kommandozeile aus einer `.env` neben der Datei, im Portainer aus den Stack-Variablen. Auch mit `-d influx` wird Mongo gebraucht, dort liegen die Metadaten der Sensoren.
|
||||
Beide Wege brauchen dieselben Zugangsdaten und `LOCALDIR` — auf der Kommandozeile aus einer `.env` neben der Datei, im Portainer aus den Stack-Variablen. Auch mit `-d influx` wird Mongo gebraucht, dort liegen die Metadaten der Sensoren.
|
||||
|
||||
**Der Netz-Name ist die Stolperstelle.** Das `docker-compose.yml` des Haupt-Stacks deklariert kein Netz — Compose legt für jedes Projekt automatisch `<projektname>_default` an und hängt alle Services hinein; daher funktioniert `MONGOHOST: mongodb`. Bei Portainer ist der Projektname **der Stack-Name**. Heißt das Stack dort `noisesensors`, passt der in `readarchive-stack.yml` eingetragene Wert `noisesensors_default`; heißt es `laerm`, muss dort `laerm_default` stehen, sonst bricht der Lauf ab:
|
||||
|
||||
~~~
|
||||
network noisesensors_default declared as external, but could not be found
|
||||
~~~
|
||||
|
||||
Vor dem ersten Lauf also im Portainer unter *Networks* nachsehen (oder `docker network ls`) und den Namen in `readarchive-stack.yml` angleichen. Das Netz wird nur an einer Stelle erzeugt — im Haupt-Stack implizit. Es auch dort als `external` zu deklarieren, führt dazu, dass es niemand mehr anlegt.
|
||||
|
||||
**Option: fester Netz-Name.** Wer die Abhängigkeit vom Stack-Namen loswerden will, benennt im Haupt-Stack das Default-Netz um:
|
||||
|
||||
~~~yaml
|
||||
networks:
|
||||
default:
|
||||
name: noisesensors_net
|
||||
~~~
|
||||
|
||||
Kein Service braucht dafür einen eigenen `networks:`-Eintrag — die automatische Zuordnung bleibt, das Netz heißt nur fest `noisesensors_net`, und in `readarchive-stack.yml` steht dieser Name statt `<stack-name>_default`. Der Preis: Beim Umstellen wechseln alle Container das Netz und werden neu erzeugt, Mongo und Influx sind also kurz weg. Die Daten liegen auf Bind-Mounts und bleiben unangetastet — trotzdem gehört das in ein Wartungsfenster und nicht nebenbei erledigt.
|
||||
|
||||
Umgekehrt gilt: Ein `networks:` an einem Service hebt dessen automatische Zuordnung auf. Wer dort etwas einträgt — etwa um *noise* zusätzlich ins Traefik-Netz zu hängen —, muss `default` mit aufführen, sonst erreicht der Service die übrigen Container des Stacks nicht mehr.
|
||||
|
||||
Ein Tag dauert etwa zwei Minuten. Schlägt ein Influx-Write fehl, werden die betroffenen Sensoren am Ende aufgelistet und der Exit-Code ist ≠ 0 (im Portainer als „Exited (1)" sichtbar).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user