Fehlerbild aus dem echten Betrieb: "mkdir: cannot create directory '/gegenbuch/schluessel': Permission denied", Container in der Neustart-Schleife. Ursache: Das Datenverzeichnis kommt als Bind-Mount vom Host; der Betreiber hatte das Projekt als root geklont, der Container lief aber direkt als UID 1000 und durfte dort nichts anlegen. Der .gitkeep-Ansatz hatte stillschweigend angenommen, dass als normaler Benutzer geklont wird - auf einem Server ist root der Normalfall. Fix: Der Container startet als root, setzt /gegenbuch per chown auf den Arbeitsbenutzer (PUID/PGID, Standard 1000) und startet sich per setpriv als dieser neu. Die eigentliche Arbeit laeuft weiterhin unprivilegiert. Schlaegt das chown fehl (rootless Docker), gibt es einen Hinweis mit dem passenden Host-Befehl statt eines stummen Abbruchs. Verifiziert mit exakt der Ausgangslage: Datenverzeichnis auf root:root gesetzt, Container gestartet -> laeuft durch, erzeugte Dateien gehoeren 1000:1000, der private Schluessel liegt mit 0600. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
28 lines
1.2 KiB
Docker
28 lines
1.2 KiB
Docker
# Gegenbuch – läuft auf einem EIGENEN Rechner, nicht dort, wo OpenCRM läuft.
|
||
#
|
||
# Der Container holt lesend einen Kontrollwert vom CRM (HTTPS + Token mit
|
||
# audit:read) und legt seine Einträge in einem Git-Repository auf DIESER
|
||
# Maschine ab. Er braucht keinen SSH-Zugang zum CRM, keine Datenbank, keine
|
||
# Shell dort. Umgekehrt kennt OpenCRM dieses Gegenbuch überhaupt nicht.
|
||
FROM node:20-slim
|
||
|
||
# git für das Buch, openssh-client für die Signaturen (ssh-keygen).
|
||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||
git openssh-client ca-certificates \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
COPY notary.mjs /opt/notary/notary.mjs
|
||
COPY entrypoint.sh /opt/notary/entrypoint.sh
|
||
RUN chmod +x /opt/notary/entrypoint.sh
|
||
|
||
# Der Container STARTET als root – aber nur, um die Rechte auf dem
|
||
# Datenverzeichnis geradezuziehen. Danach gibt der entrypoint die Privilegien
|
||
# ab und arbeitet als unprivilegierter Benutzer weiter.
|
||
#
|
||
# Grund: Das Datenverzeichnis kommt als Bind-Mount vom Host. Wer das Projekt
|
||
# als root geklont hat, hat dort root-eigene Verzeichnisse – ein Container, der
|
||
# direkt als UID 1000 startet, kann darin nichts anlegen.
|
||
WORKDIR /gegenbuch
|
||
|
||
ENTRYPOINT ["/opt/notary/entrypoint.sh"]
|