Bagaimana cara mengubah izin folder menjadi 777 di Dockerfile?

Saya memiliki direktori proyek seperti ini:

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

Ini adalah saya docker-compose.yml berkas:

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

Apa yang saya inginkan: Saya ingin berubah app/uploads/photos izin folder ini untuk 777.Ini adalah folder upload, sehingga pengguna dapat meng-upload ke folder ini.

Saya Dockerfile sekarang adalah terlihat seperti ini:

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

Setelah melihat ini pertanyaan,Untuk mencapai apa yang saya inginkan,saya mencoba di bawah ini:

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

Tapi tampaknya seperti chmod perintah di dockerfile saya tidak berlaku.Karena setiap kali saya meng-upload beberapa file ke app/uploads/photos dalam kode saya, saya nginx server terus mendapatkan kesalahan ini:

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

Seseorang tolong bantu.Harap memberikan solusi untuk bagaimana mengubah izin dari folder di Dockerfile.

Pembaruan:

Saya mencoba mengubah izin dari /var/www/uploads setelah membangun wadah dan wadah berjalan dengan melakukan di bawah ini:

docker exec -it myapp /bin/sh

kemudian jalankan

chmod -R 777 /var/www/uploads

Apa yang saya dapatkan adalah chmod: /var/www/uploads: Operation not permitted

Oleh karena itu saya menduga kesalahan ini juga akan terjadi ketika buruh pelabuhan sedang membangun, maka menurut jawaban ini dari serverfault, Saya mencoba memodifikasi dockerfile menjadi ini:

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

Tapi itu masih tidak berhasil. Tapi sepertinya pendekatan saya di atas juga salah.Karena aku sudah berjalan di root dalam dockerfile.Tetapi pada saat yang sama,ketika saya mengakses wadah di host menggunakan docker exec, juga mendapatkan Operation not permitted.

Saya sangat baru di Docker.Hanya tidak bisa mencari tahu bagaimana untuk mendapatkan ini dilakukan.

Apa yang saya berharap untuk tahu:

1) Bagaimana mengubah folder var/www/uploads untuk izin 777?

2) Apa masalah yang menyebabkan saya tidak dapat mengubah izin dari pendekatan saya?

3) Apa cara yang lebih baik untuk mencapai ini? (Jika ada)

Anda benar-benar tidak harus mengatur 777, mungkin akan lebih baik untuk hanya mengubah kepemilikan direktori itu menjadi www akun.

Bagaimanapun perubahan Anda di Dockerfile benar-benar tidak masalah, karena Anda memiliki volume (appdata:/var/www) artinya izin yang anda miliki dalam gambar ditutupi oleh volume Anda.

Anda docker exec -it myapp /bin/sh akan gagal karena gambar itu berjalan sebagai www yang tidak akan dapat menjalankan chmod pada file yang tidak dimiliki oleh www.

Pokoknya coba saja pemetaan volume ke gambar lain sementara. Lakukan sesuatu seperti docker run --rm -it -v appdata:/var/www debian:buster-slim untuk memulai sesi interaktif ke gambar Debian dengan volume yang dipetakan. Gambar itu default untuk berjalan sebagai root, jadi Anda harus dapat mengubah/memperbaiki izin dalam volume. Anda juga bisa melewati --user opsi saat menjalankan docker exec Anda.

Ini sudah ada dalam jawaban yang diterima, tetapi mari kita tunjukkan ini secara terpisah, dengan penekanan tambahan: Anda harus pada dasarnya never menggunakan chmod 777 - itu tidak aman dan canggung.