【问题标题】:Docker user Permission denied on accessing folder in containerDocker用户权限被拒绝访问容器中的文件夹
【发布时间】:2017-04-16 02:13:40
【问题描述】:

我正在运行 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 文件夹?

【问题讨论】:

    标签: django ubuntu docker pip docker-compose


    【解决方案1】:

    您可以通过在 Docker 之外解决它的方式来解决这个问题。要么授予该用户对该文件夹/结构的适当权限,要么如您所说,您可以使用 virtualenv。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2019-01-06
        • 2021-10-30
        • 1970-01-01
        • 2021-07-30
        • 2020-03-17
        • 1970-01-01
        • 2017-04-18
        • 2021-03-05
        • 2022-01-12
        相关资源
        最近更新 更多