Как предоставить разрешения на доступ к папке в контейнере докеров

Я создаю папку внутри моего файла Docker, и я хочу дать ему разрешение на запись. Но я получаю разрешение отклонить ошибку, когда я пытаюсь это сделать

FROM python:2.7
RUN pip install Flask==0.11.1 
RUN useradd -ms /bin/bash admin
USER admin
COPY app /app
WORKDIR /app
RUN chmod 777 /app
CMD ["python", "app.py"] 

Моя ошибка

PS C:\Users\Shivanand\Documents\Notes\Praneeth work\Flask> docker build -t 
shivanand3939/test .
Sending build context to Docker daemon  209.9kB
Step 1/8 : FROM python:2.7
---> 8a90a66b719a
Step 2/8 : RUN pip install Flask==0.11.1
---> Using cache
---> 6dc114bd7cf1
Step 3/8 : RUN useradd -ms /bin/bash admin
---> Using cache
---> 1cfdb6eea7dc
Step 4/8 : USER admin
---> Using cache
---> 27c5e8b09f15
Step 5/8 : COPY app /app
---> Using cache
---> 5d628573b24f
Step 6/8 : WORKDIR /app
---> Using cache
---> 351e19a5a007
Step 7/8 : RUN chmod 777 /app
---> Running in aaad3c79e0f4
**chmod: changing permissions of ‘/app: Operation not permitted
The command '/bin/sh -c chmod 777 /app' returned a non-zero code: 1**

Как я могу предоставить права на запись в папку приложения внутри контейнера Docker

Ответ 1

Я предполагаю, что вы переходите на пользовательский "администратор", который не имеет права изменять права доступа в каталоге/приложении. Измените владельца, используя "root" пользователя. Ниже Dockerfile работал для меня -

FROM python:2.7
RUN pip install Flask==0.11.1 
RUN useradd -ms /bin/bash admin
COPY app /app
WORKDIR /app
RUN chown -R admin:admin /app
RUN chmod 755 /app
USER admin
CMD ["python", "app.py"] 

PS - Попытайтесь избавиться от разрешения "777". Я на мгновение попытался сделать это в Dockerfile.

Ответ 2

Как уже указал другой пользователь, USER admin на более поздний шаг.

FROM python:2.7
RUN pip install Flask==0.11.1 
RUN useradd -ms /bin/bash admin
COPY --chown=admin:admin app /app
WORKDIR /app
USER admin
CMD ["python", "app.py"] 

Для версий v17.09.0-ce и новее вы можете использовать необязательный флаг --chown=<user>:<group> с командами ADD или COPY.

Например

COPY --chown=<user>:<group> <hostPath> <containerPath>

Документация для флага --chown описана на странице справки Dockerfile.