snippets · bash
Docker hat Dateien erzeugt, die ich auf dem Host nicht mehr bearbeiten kann
Die Anwendung im Container funktioniert, aber PHPStorm oder dein Shell-User kann neu erzeugte Dateien nicht mehr speichern oder löschen.
Das Problem
Bei Bind-Mounts schreibt ein Prozess im Container direkt auf das Host-Dateisystem. Entscheidend sind deshalb nicht die Namen www-data oder benjamin, sondern die numerischen UID/GID und die tatsächlichen Rechte.
Erst beobachten
Auf dem Host:
id
find <PATH> -maxdepth 2 -printf '%M %u:%g %p\n' | head -80
Im Container:
docker compose exec <SERVICE> id
docker compose exec <SERVICE> sh -lc 'id && umask'
Damit beantwortest du drei Fragen: Wer bin ich auf dem Host? Unter welcher UID/GID läuft der schreibende Prozess? Mit welcher umask entstehen neue Dateien?
Warum chmod -R 777 keine Diagnose ist
Es überdeckt die Ursache und macht den gesamten Baum unnötig beschreibbar. Besser ist ein konsistentes Modell: gemeinsamer Gruppenzugriff, passende UID/GID oder gezielt read-only Mounts dort, wo der Container gar nicht schreiben muss.
Typischer Fix im Entwicklungsprojekt
Wenn Host-User und Webserver-Prozess bewusst über eine gemeinsame Gruppe arbeiten, prüfe Eigentümer, Gruppe, setgid auf Verzeichnissen und eine passende umask. Danach eine Testdatei neu erzeugen und nicht nur alte Dateien reparieren.
Docker weist ausdrücklich darauf hin, dass beschreibbare Bind-Mounts Host-Dateien verändern können.
Quelle: https://docs.docker.com/engine/storage/bind-mounts/