2016-12-01 2 views
1

Я бегу docker-compose, чтобы собрать вместе Джанго с несколькими другими службами с помощью следующей конфигурации:Docker Разрешение отказано в доступе к папке в контейнере

Dockerfile:

FROM ubuntu:16.10 
FROM python:3.5.0 

ENV EXTRACTOR_SRC=. 
ENV EXTRACTOR_SRVHOME=/srv 
ENV EXTRACTOR_SRVPROJ=/srv/extractor_django 

#Install package dependencies 
RUN apt-get update && apt-get -y upgrade 
RUN apt-get install -y python python-pip virtualenvwrapper 

# Create application subdirectories 
WORKDIR $EXTRACTOR_SRVHOME 
RUN mkdir media static logs 
VOLUME ["$EXTRACTOR_SRVHOME/media/", "$EXTRACTOR_SRVHOME/logs/"] 

# Copy application source code to SRCDIR 
COPY $EXTRACTOR_SRC $EXTRACTOR_SRVPROJ 

# Install Python dependencies 
RUN pip install -r $EXTRACTOR_SRVPROJ/requirements.txt 

# create user 
RUN adduser --disabled-password --gecos '' dockeruser 

(соответствующая) Докер -compose.yml:

version: '2' 

services: 

    # Django web server 
    web: 
    build: 
     context: . 
     dockerfile: Dockerfile 
    hostname: web 
    command: /srv/www/run_web.sh 
    volumes: 
      - .:/srv/www 
    ports: 
     - "8000:8000" 

run_web.sh:

#!/bin/bash 
set -o verbose 

sleep 15 
cd /srv/extractor_django 

su -m dockeruser -c "python manage.py makemigrations" 
su -m dockeruser -c "python manage.py migrate" 
su -m dockeruser -c "python manage.py collectstatic --noinput" 

# Start Gunicorn processes 
echo Starting Gunicorn. 

su -m dockeruser -c "gunicorn extractorService.wsgi:application \ 
    --name extractor_django \ 
    --bind 0.0.0.0:8000 \ 
    --workers 10 \ 
    --log-level=info" 

Во время выполнения одного из требований питона (Spacy) пытается хранить и получать доступ к файлам в ограниченной папке вызывает ошибку:

PermissionError: [Errno 13] Permission denied:  
'/usr/local/lib/python3.5/site-packages/spacy/data' 

Есть ли способ, я могу предоставить докерузеру достаточные привилегии, которые будут работать. В качестве альтернативы было бы более разумно запускать это с помощью virtualenv, поскольку проблема, по-видимому, является доступом к общесистемным папкам python?

ответ

0

Вы можете просто решить это способами, которые вы решили бы решить за пределами Докера. Либо предоставите этому пользователю соответствующие разрешения для этой папки/структуры, либо, как вы говорите, вы можете использовать virtualenv.

0

Вы пытались предоставить расширенные привилегии контейнеру с опцией privileged?

version: '2' 

services: 

    # Django web server 
    web: 
    build: 
     privileged: true 
     context: . 
     dockerfile: Dockerfile 
    hostname: web 
    command: /srv/www/run_web.sh 
    volumes: 
      - .:/srv/www 
    ports: 
     - "8000:8000"