2016-12-01 63 views
1

我正在docker-compose汇集的Django与一些其他的服务,以下配置:泊坞窗的用户权限被拒绝在容器访问文件夹

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' 

有没有一种方法可以让我给dockeruser足够的权限,这将工作。或者,用virtualenv运行这个问题似乎更容易理解,因为问题似乎是访问系统范围的python文件夹?

回答

0

你可以用Docker以外的方式解决这个问题。通过该文件夹/结构为该用户提供适当的权限,或者如您所说可以使用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"