كيفية تغيير إذن من مجلد إلى 777 في دوكيرفيل?

لدي دليل مشروع مثل هذا:

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

هذا هو بلدي docker-compose.yml الملف:

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

ما أريد: اريد التغيير app/uploads/photos إذن هذا المجلد ل 777.هذا مجلد تحميل ، بحيث يمكن للمستخدم تحميله على هذا المجلد.

بلدي Dockerfile الآن تبدو مثل هذا:

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

بعد النظر في هذا سؤال، من أجل تحقيق ما أريد ، حاولت أدناه:

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

ولكن يبدو أن chmod الأمر في ملف الإرساء الخاص بي لا يسري.السبب كلما قمت بتحميل بعض الملفات إلى app/uploads/photos في قانون بلدي ، بلدي nginx يستمر الخادم في الحصول على هذا الخطأ:

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

شخص ما الرجاء المساعدة.يرجى تقديم حل لكيفية تغيير إذن مجلد في Dockerfile.

تحديث:

حاولت تغيير إذن من /var/www/uploads بعد بناء الحاوية والحاوية قيد التشغيل عن طريق القيام أدناه:

docker exec -it myapp /bin/sh

ثم تشغيل

chmod -R 777 /var/www/uploads

ما أحصل عليه هو chmod: /var/www/uploads: Operation not permitted

لذلك أظن أن هذا الخطأ سيحدث أيضا عندما يقوم عامل الميناء ببناء ، ثم وفقا ل هذه الإجابة من سيرفيرفولت، حاولت تعديل دوكيرفيل إلى هذا:

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

لكنه لا يزال لا يعمل. ولكن يبدو أن نهجي أعلاه خاطئ أيضا.لأنني أركض بالفعل root في ال dockerfile.ولكن في الوقت نفسه ، عند الوصول إلى الحاوية في المضيف باستخدام docker exec، أيضا الحصول على Operation not permitted.

أنا جديد جدا في عامل الميناء.فقط غير قادر على معرفة كيفية الحصول على هذا القيام به.

ما آمل أن أعرف:

1) كيفية تغيير المجلد var/www/uploads إذن 777?

2)ما هي المشكلة التي تسبب أنا غير قادر على تغيير إذن من وجهة نظري?

3) ما هي أفضل طريقة لتحقيق ذلك? (إن وجدت)

كنت حقا لا ينبغي تعيين 777، ربما يكون من الأفضل فقط تغيير ملكية هذا الدليل إلى www الحساب.

على أي حال التغييرات في دوكيرفيل حقا لا يهم ، لأن لديك حجم (appdata:/var/www) وهذا يعني أن الأذونات لديك في الصورة وملثمين من حجم الخاصة بك.

الخاص بك docker exec -it myapp /bin/sh سيكون الفشل لأن هذه الصورة تعمل على النحو التالي www والتي لن تكون قادرة على تشغيل شمود على ملف لا يملكها www.

على أي حال ، حاول فقط تعيين مستوى الصوت في صورة أخرى مؤقتا. افعل شيئا مثل docker run --rm -it -v appdata:/var/www debian:buster-slim لبدء جلسة تفاعلية لصورة دبيان مع حجم معين في. هذه الصورة الافتراضية لتشغيل كجذر ، لذلك يجب أن تكون قادرا على تغيير/إصلاح الأذونات في وحدة التخزين. يمكنك أيضا تمرير --user الخيار عندما عند تشغيل عامل الميناء الخاص بك إكسيك.

انها بالفعل في الإجابة المقبولة ، ولكن دعونا لا نزال نشير إلى ذلك بشكل منفصل ، مع تركيز إضافي: يجب عليك في الأساس _ أبدا _ استخدام شمود 777 - فمن غير آمن والخرقاء.