Cómo cambiar el permiso de una carpeta a 777 en Dockerfile?

Tengo un directorio de proyectos como este:

|-var/www|-docker-compose.yml|-app|--uploads|---photos|-Dockerfile

Este es mi docker-compose.yml file:

myapp:    build:      context: myfolder      dockerfile: Dockerfile    container_name: flask    image: api/v1:01    restart: unless-stopped    environment:      APP_ENV: "prod"      APP_DEBUG: "False"      APP_PORT: 5000    volumes:      - appdata:/var/www

Lo que quiero: Quiero cambiar app/uploads/photos el permiso de esta carpeta para 777.Esta es una carpeta de carga, por lo que el usuario puede cargar en esta carpeta.

Mi Dockerfile ahora se ve así:

FROM python:3.6.8-alpine3.9ENV GROUP_ID=1000 \    USER_ID=1000WORKDIR /var/www/ADD . /var/www/RUN apk add --no-cache build-base libffi-dev openssl-dev ncurses-devRUN pip install --upgrade pipRUN pip install -r requirements.txtRUN addgroup -g $GROUP_ID wwwRUN adduser -D -u $USER_ID -G www www -s /bin/shUSER wwwEXPOSE 5000

Después de mirar en este pregunta,Para lograr lo que quiero,intenté a continuación:

FROM python:3.6.8-alpine3.9ENV GROUP_ID=1000 \    USER_ID=1000WORKDIR /var/www/ADD . /var/www/RUN apk add --no-cache build-base libffi-dev openssl-dev ncurses-devRUN pip install --upgrade pipRUN pip install -r requirements.txtRUN addgroup -g $GROUP_ID wwwRUN adduser -D -u $USER_ID -G www www -s /bin/shRUN chown -R www:www /var/wwwRUN chmod -R 777 /var/www/uploadsRUN chmod -R 777 /var/www/uploads/photosUSER wwwEXPOSE 5000

Pero parece que el chmod el comando en mi dockerfile no está surtiendo efecto.Porque cada vez que subo algunos archivos a app/uploads/photos en mi código, mi nginx el servidor sigue recibiendo este error:

PermissionError: [Errno 13] Permission denied: '/var/www/uploads/photos/myfilename.png'

Alguien por favor ayuda.Proporcione una solución sobre cómo cambiar el permiso de una carpeta en Dockerfile.

ACTUALIZAR:

Intenté cambiar el permiso de /var/www/uploads después de construir el contenedor y el contenedor se está ejecutando haciendo lo siguiente:

docker exec -it myapp /bin/sh

luego corre

chmod -R 777 /var/www/uploads

Lo que obtengo es chmod: /var/www/uploads: Operation not permitted

Por lo tanto, sospecho que este error también ocurrirá cuando la ventana acoplable se esté compilando,luego de acuerdo con esta respuesta de serverfault, Intenté modificar el dockerfile a esto:

FROM python:3.6.8-alpine3.9ENV GROUP_ID=1000 \    USER_ID=1000WORKDIR /var/www/ADD . /var/www/USER rootRUN chmod -R 777 /var/www/uploadsRUN addgroup -g $GROUP_ID wwwRUN adduser -D -u $USER_ID -G www www -s /bin/shUSER wwwRUN apk add --no-cache build-base libffi-dev openssl-dev ncurses-devRUN pip install --upgrade pipRUN pip install -r requirements.txtEXPOSE 5000

Pero todavía no funciona. Pero parece que mi enfoque anterior también es incorrecto.Porque yo ya corro en root en el dockerfile.Pero al mismo tiempo, cuando accedo al contenedor en el host usando docker exectambién llegar Operation not permitted.

Soy muy nuevo en Docker.Simplemente no puedo entender cómo hacer esto.

Lo que espero saber:

1) Cómo cambiar la carpeta var/www/uploads ¿al permiso 777?

2) ¿Cuál es el problema que causa que no pueda cambiar el permiso de mi enfoque?

3) ¿Cuál es la mejor manera de lograrlo? (En su caso)

Realmente no deberías. 777, probablemente sería mejor simplemente cambiar la propiedad de ese directorio a la www cuenta.

De todos modos, sus cambios en el Dockerfile realmente no importan, porque tiene un volumen (appdata:/var/www) lo que significa que los permisos que tiene en la imagen están enmascarados por su volumen.

Su docker exec -it myapp /bin/sh estaría fallando porque esa imagen se está ejecutando como www que no podrá ejecutar chmod en un archivo que no sea de su propiedad www.

De todos modos, intente asignar el volumen a otra imagen temporalmente. Hacer algo como docker run --rm -it -v appdata:/var/www debian:buster-slim para iniciar una sesión interactiva en una imagen de Debian con el volumen asignado. De forma predeterminada, esa imagen se ejecuta como root, por lo que debería poder cambiar/corregir los permisos en el volumen. También puede pasar el --user opción cuando al ejecutar su docker exec.

Ya está en la respuesta aceptada, pero señalémoslo por separado, con énfasis adicional:** básicamente, nunce debe usar chmod 777**, es inseguro y torpe.