Al configurar y ejecutar una instancia de Docker, al arrancar, nginx proporciona un 403 Forbidden
acceso a archivos estáticos.
En Dockerfile
, uso el COPY
comando para mover todos los archivos a /var/www/app
, luego uso el RUN
comando al chmod
directorio estático para permitir que el www-data
usuario lea los archivos.
Se Dockerfile
ve así:
...
COPY app /var/www/app
RUN chmod -R go+rX /var/www/app/static
...
Tras la investigación (ejecutando bash de forma interactiva en la instancia), descubrí que el usuario www-data no puede leer los archivos ni enumerar los directorios, a menos que el usuario root lo haga primero. Esto es lo que encuentro realmente confuso: es como si los permisos enumerados fueran completamente ineficaces hasta que el usuario root revisa los archivos.
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
¿Cómo puede ser esto? ¿Por qué la ejecución ls
hace que aparentemente cambien los permisos efectivos?
Respuesta1
¿Usaste ADD en ese Dockerfile? Evite AGREGAR, porque después de esa instrucción todos los archivos y directorios nuevos se crean con un UID y GID de 0.