PermissionError:\[Errno 13\] 权限被拒绝:'/manage.py'

新手上路,请多包涵

我正在尝试在 docker-composer 中运行以下命令,以使用 django-admin 开始项目:

 docker-compose run app sh -c "django-admin startproject app ."

这会产生错误:

     Traceback (most recent call last):
  File "/usr/local/bin/django-admin", line 10, in <module>
    sys.exit(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 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 364, 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: '/manage.py'

Dockerfile如下:

 FROM python:3.7-alpine
MAINTAINER anubrij chandra

ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /requirements.txt

RUN pip install -r /requirements.txt

RUN mkdir /app
COPY ./app /app

RUN adduser -D dockuser
USER dockuser

我的 docker-compose.yml

 version: "3"

services:
  app:
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: >
      sh -c "python manage.py runserver 0.0.0.0:8000"

我应用了 此 Stack Overflow 线程 中建议的解决方案,但没有奏效。

我正在使用 Ubuntu 18.04。

原文由 Anubrij Chandra 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

在您的 dockerfile 中,您指向一个新用户 dockuser

 RUN adduser -D dockuser
USER dockuser

因此,您的容器将以用户 dockuser 开始,该用户似乎没有适当的权限来运行 /manage.py

你可以

  • 删除您创建并指向的上述行 dockuser

或者

  • 为用户 dockuser 使用 chownchmod 命令在您的 /manage.py 文件的 dockerfile 中提供适当的权限。

我在 这里 回答了类似的问题。

原文由 mchawre 发布,翻译遵循 CC BY-SA 4.0 许可协议

Ubuntu 21.04

我来这里是为了寻找 PermissionError: [Errno 13] Permission denied: 所以我就把它留在这里。

注意: 以下答案不适用于多用户系统… 请参阅此答案以获取另一种可能的解决方案


如果您想为 1 个用户设置它并忘记它,您自己的用户……这就是我在我的开发机器上拥有的。

我不拥有 unix 套接字,所以我把它弄丢了。 (这让它立即工作)

 sudo chown $(whoami):$(whoami) /var/run/docker.sock

另一个更持久的开发环境解决方案是修改 unix 套接字创建的用户所有权。这将为您的用户提供所有权,因此它将在重新启动之间保持:

 sudo nano /etc/systemd/system/sockets.target.wants/docker.socket

docker.socket:

 [Unit]
Description=Docker Socket for the API

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=YOUR_USERNAME_HERE
SocketGroup=docker

[Install]
WantedBy=sockets.target

又一个不那么老套的解决方案: https ://stackoverflow.com/a/70124863/2026508

原文由 jmunsch 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题