Как изменить разрешение папки на 777 в Dockerfile? - PullRequest
0 голосов
/ 14 марта 2020

У меня есть каталог проекта, подобный этому:

|-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) Как лучше всего добиться это? (Если есть)

...