繁体   English   中英

Docker用户访问容器中的文件夹时拒绝权限

[英]Docker user Permission denied on accessing folder in container

我正在使用以下配置运行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

(相关)Docker-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"

在运行期间,其中一个python要求(spacy)尝试存储和访问受限文件夹中的文件,从而导致错误:

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

有没有办法可以给dockeruser足够的权限。 或者用virtualenv运行它会更明智,因为问题似乎是访问系统范围的python文件夹?

你可以通过在Docker之外解决它的方式来解决这个问题。 要么为该用户提供该文件夹/结构的适当权限,要么就像您说的那样可以使用virtualenv。

您是否尝试使用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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM