django - PermissionError:[Errno 13]尝试使用docker-compose创建项目时,权限被拒绝: '/app/manage.py'

标签 django docker django-rest-framework docker-compose

我正在关注有关如何使用Docker创建Django REST Framework API的教程,并且首次尝试成功运行了该项目,但是由于PermissionError,因此无法重新创建它。

目录结构以以下方式显示:

project_directory
  - Dockerfile
  - docker-compose.yml
  - requirements.txt
  - app/ # this directory was created manually

成功的配置如下所示:
Dockerfile:
FROM python:3.7-alpine
LABEL author="aqv"

ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /requirements.txt
RUN apk add --update --no-cache postgresql-client
RUN apk add --update --no-cache --virtual .tmp-build-deps \
    gcc libc-dev linux-headers postgresql-dev

RUN pip install -r /requirements.txt
RUN apk del .tmp-build-deps

RUN mkdir /app
WORKDIR /app
COPY ./app /app

RUN adduser -D user
USER user
requirements.txt:
Django>=2.1.3,<2.2.0
djangorestframework>=3.9.0,<3.10.0
psycopg2>=2.7.5,<2.8.0
docker-compose.yml:
version: "3"

services:
  app:
    build:
      context: .
    ports:
      - "3005:8000"
    volumes:
      - ./app:/app
    command: >
      sh -c "python manage.py wait_for_db &&
             python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000"
    environment:
      - DB_HOST=db
      - DB_NAME=app
      - DB_USER=postgresuser
      - DB_PASS=<pass>
    depends_on:
      - db

  db:
    image: postgres:10-alpine
    environment:
      - POSTGRES_DB=app
      - POSTGRES_USER=postgresuser
      - POSTGRES_PASSWORD=<pass>

第一步是在项目目录中运行(1)docker build .,然后运行(2)docker-compose build(这使第一个命令变得多余,但没有破坏任何内容),最后是(3)docker-compose run app sh -c "django-admin.py startproject app ."

现在,最后一条命令以:
Starting project_t_db_1 ... done
Traceback (most recent call last):
  File "/usr/local/bin/django-admin.py", line 5, in <module>
    management.execute_from_command_line()
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 3.7, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 353, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/commands/startproject.py", line 20, in handle
    super().handle('project', project_name, target, **options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/templates.py", line 155, in handle
    with open(new_path, 'w', encoding='utf-8') as new_file:
PermissionError: [Errno 13] Permission denied: '/app/manage.py'
/app目录为空,上面的project_directory中仅列出了文件,因此/app/manage.py不存在。

在Windows 10计算机(CMD和PowerShell,包括以admin身份运行),Windows上的Ubuntu和远程Ubuntu服务器上进行了重新运行项目创建的尝试。使用root和普通用户检查了文件和目录的所有权。

所有Docker容器均被杀死(docker kill $(docker ps -q)),图像被删除(docker rm $(docker ps -a -q)docker rmi $(docker images -q)),环境的创建从头开始。

我观察到,我可以在新设置的服务器上成功创建项目。但是,当尝试创建另一个或用另一个替换现有的时,问题再次出现。

您会建议检查什么?

最佳答案

我正在将应用程序目录创建为用户的主目录-这样,用户对其具有正确的权限

RUN adduser \
    --disabled-password \
    --gecos "" \
    --home /app \
    app
USER app

WORKDIR /app
COPY ./app/ /app/

关于django - PermissionError:[Errno 13]尝试使用docker-compose创建项目时,权限被拒绝: '/app/manage.py',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55729645/

相关文章:

python - 在 Django 中使用 Pylint 时禁用某些消息

python - 无法导入名称 "Contact"

docker - 在 docker-compose 中获取凭证规范 (gMSA) 时出现问题

python - Django Rest Framework 模型序列化程序 : Set all fields to read only except one

Django Rest Framework 在创建记录后设置一个只读字段

Django memoize 每个请求

python - 如何同步 Django 的 'Client' 和 Selenium 的 webdriver 之间使用的 html/session

Django QuerySet values() 包括 ForeignKey 字段

python - Neo4j Docker 连接失败

java - 如何为具有多个存储库的 IntelliJ 项目编写 Dockerfile?