Beim Einrichten und Ausführen einer Docker-Instanz gibt nginx beim Booten einen 403 Forbidden
Zugriff auf statische Dateien aus.
Im Dockerfile
verwende ich den COPY
Befehl, um alle Dateien nach zu verschieben /var/www/app
, dann verwende ich den RUN
Befehl für chmod
das statische Verzeichnis, um dem www-data
Benutzer das Lesen der Dateien zu ermöglichen.
Das Dockerfile
sieht so aus:
...
COPY app /var/www/app
RUN chmod -R go+rX /var/www/app/static
...
Bei der Untersuchung (durch interaktives Ausführen von Bash auf der Instanz) stellte ich fest, dass der Benutzer www-data die Dateien nicht lesen oder die Verzeichnisse nicht auflisten kann, es sei denn, der Root-Benutzer tut dies zuerst. Das finde ich wirklich verwirrend – es ist, als ob die aufgelisteten Berechtigungen völlig wirkungslos wären, bis der Root-Benutzer die Dateien überprüft.
root@0e4b48a67a72:/# sudo -u www-data ls -la /var/www/app/static/js
ls: cannot access /var/www/app/static/js: Permission denied
root@0e4b48a67a72:/# ls -la /var/www/app/static/js
total 100
drwxr-xr-x 2 root root 4096 Oct 9 02:40 .
drwxr-xr-x 10 root root 4096 Oct 9 02:40 ..
-rw-r--r-- 1 root root 93868 Oct 6 13:39 jquery.js
root@0e4b48a67a72:/# sudo -u www-data ls -la /var/www/app/static/js
total 100
drwxr-xr-x 2 root root 4096 Oct 9 02:40 .
drwxr-xr-x 10 root root 4096 Oct 9 02:40 ..
-rw-r--r-- 1 root root 93868 Oct 6 13:39 jquery.js
Wie kann das sein? Warum ls
führt das Ausführen scheinbar dazu, dass sich die effektiven Berechtigungen ändern?
Antwort1
Haben Sie in diesem Dockerfile ADD verwendet? Vermeiden Sie ADD, da nach dieser Anweisung alle neuen Dateien und Verzeichnisse mit einer UID und GID von 0 erstellt werden.