У меня есть каталог проекта, подобный этому:
|-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.9
ENV GROUP_ID=1000 \
USER_ID=1000
WORKDIR /var/www/
ADD . /var/www/
RUN apk add --no-cache build-base libffi-dev openssl-dev ncurses-dev
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
RUN addgroup -g $GROUP_ID www
RUN adduser -D -u $USER_ID -G www www -s /bin/sh
USER www
EXPOSE 5000
Посмотрев на этот вопрос , чтобы добиться того, чего я хочу, я попробовал ниже:
FROM python:3.6.8-alpine3.9
ENV GROUP_ID=1000 \
USER_ID=1000
WORKDIR /var/www/
ADD . /var/www/
RUN apk add --no-cache build-base libffi-dev openssl-dev ncurses-dev
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
RUN addgroup -g $GROUP_ID www
RUN adduser -D -u $USER_ID -G www www -s /bin/sh
RUN chown -R www:www /var/www
RUN chmod -R 777 /var/www/uploads
RUN chmod -R 777 /var/www/uploads/photos
USER www
EXPOSE 5000
Но похоже, что команда chmod
в моем файле dockerfile не действует. Причина, когда я загружаю некоторые файлы в 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
Поэтому я подозреваю, что эта ошибка будет также происходило, когда docker строится, тогда, согласно этому ответу от serverfault , я попытался изменить dockerfile так:
FROM python:3.6.8-alpine3.9
ENV GROUP_ID=1000 \
USER_ID=1000
WORKDIR /var/www/
ADD . /var/www/
USER root
RUN chmod -R 777 /var/www/uploads
RUN addgroup -g $GROUP_ID www
RUN adduser -D -u $USER_ID -G www www -s /bin/sh
USER www
RUN apk add --no-cache build-base libffi-dev openssl-dev ncurses-dev
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
EXPOSE 5000
Но он все еще не работает. Мой вышеупомянутый подход также неверен. Потому что я уже запускаю в root в dockerfile. Но в то же время, когда я получаю доступ к контейнеру в хосте, используя docker exe c, также получаю Операцию не разрешено.
Я очень новичок в Docker. Просто не могу понять, как это сделать.
Что я надеюсь знать:
1) Как сменить папку var / www/uploads на разрешение 777?
2) В чем проблема, из-за которой я не могу изменить разрешение из моего подхода?
3) Как лучше всего добиться это? (Если есть)