Отказано в доступе Docker при записи файлов внутри контейнера - PullRequest
1 голос
/ 04 ноября 2019

Я пытаюсь скачать PDF и сохранить его в моем приложении, которое докеризуется. Кажется, проблема в том, что мне не разрешено писать файлы внутри контейнера. Вот шаги, которые я предпринял:

Сначала я создал именованный том myvol: docker volume create myvol. Затем я обновил мой docker-compose.yml файл следующим образом:

version: "3"
services:
        webpp:
                container_name: webapp
                image: webapp:latest
                build: .
                ports:
                        - "8000:8000"
                volumes:
                        - myvol:/app

volumes:
        myvol:

И для справки, мой Dockerfile:

FROM python:3.7

WORKDIR /app
ADD ./requirements.txt .
RUN pip install -r requirements.txt
ADD . .
RUN groupadd -g 999 appuser && \
        useradd -r -d /app -u 999 -g appuser appuser
RUN chown -R appuser:appuser /app

USER appuser
RUN mkdir webapp/_tmp; chmod a+rwx webapp/_tmp/

EXPOSE 8000
ENTRYPOINT ["python", "main.py"]

Когда я запускаю свой код, я получаю отказано в разрешении. То же самое происходит, если я exec в контейнер и пытаюсь что-то записать, или, например, wget http://duck.com также выдает ошибку «Отказано в доступе».

Я не уверен, что случилось, так как даже docker inspect кажется правильным ...

        "Mounts": [                                                                                                                                                                                                
            {                                                                                                                                                                                                      
                "Type": "volume",                                                                                                                                                                                  
                "Name": "myvol",                                                                                                                                                        
                "Source": "/var/lib/docker/volumes/myvol/_data",                                                                                                                        
                "Destination": "/app",                                                                                                                                                                             
                "Driver": "local",                                                                                                                                                                                 
                "Mode": "rw",                                                                                                                                                                                      
                "RW": true,                                                                                                                                                                                        
                "Propagation": ""                                                                                                                                                                                  
            }                                                                                                                                                                                                      
        ], 
...                                                                                                                                                                     
            "Volumes": {                                                                                                                                                                                           
                "/app": {}                                                                                                                                                                                         
            },                                                                                                                                                                                                     
            "WorkingDir": "/app",                                                                                                                                                                                  
            "Entrypoint": [                                                                                                                                                                                        
                "python",                                                                                                                                                                                          
                "main.py"                                                                                                                                                                                          
            ], 
...

1 Ответ

0 голосов
/ 04 ноября 2019

раздел volumes в вашей композиции - myvol:/app перезапишет разрешение и все, что содержится в папке /app, вы можете удалить его из вашей композиции.

, если вы хотите использовать томачтобы сохранить данные, создайте другое монтирование как / app и укажите его в своем коде Python

...