【问题标题】:PermissionError: [Errno 13] Permission denied: '/manage.py'PermissionError:[Errno 13] 权限被拒绝:'/manage.py'
【发布时间】:2019-11-09 02:08:37
【问题描述】:

我正在尝试在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"

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

我使用的是 Ubuntu 18.04。

【问题讨论】:

    标签: python django docker docker-compose django-admin


    【解决方案1】:

    RUN adduser -D dockuser 之后将此添加到您的Dockerfile

    RUN chown dockuser:dockuser -R /app/
    

    如果你已经挂载了文件,为什么还要COPY这些文件?

    如果要保留挂载,则需要在HOST系统上的文件夹上添加rw权限,而不是Container上的文件夹

    【讨论】:

    • Step 11/11 : RUN chown user:user -R /app/ ---&gt; Running in 4692ee51488d chown: /app/: Operation not permitted chown: /app/: Operation not permitted The command '/bin/sh -c chown user:user -R /app/' returned a non-zero code: 1
    • 是的,CHOWN 文件夹完成了任务。
    • @PranKumarSarkar 你必须在USER user 行之前完成。
    【解决方案2】:

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

    RUN adduser -D dockuser
    USER dockuser
    

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

    你可以

    • 删除上面提到的您创建并指向的行 dockuser

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

    我已经回答了类似的问题here

    【讨论】:

      【解决方案3】:

      如果您使用的是 mac,这可能对您有用。

      在解决此错误(以及其他奇怪错误)的 4 天后,我发现我需要修复文件系统中的 docker 权限。为此,请访问:

      系统偏好设置 -> 安全和隐私 -> 隐私选项卡 -> 全盘访问(在左侧,在列表中的某处) -> 点击 + -> Docker 应用程序

      非常令人沮丧的调试问题,希望对您有所帮助。

      【讨论】:

      • 这绝对重要——对很多人来说可能是个大问题。
      • 如何在 Ubuntu 或 Windows 上执行此操作?我遇到了同样的错误。
      • 这值得更多的支持。真的真的拯救了我的一天。谢谢大佬!!!
      【解决方案4】:

      ubuntu 21.04

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

      我不拥有 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
      

      【讨论】:

      • 没有其他东西对我有用,谢谢你列出这个!
      • 10 颗星,解决了我的问题
      【解决方案5】:

      我遇到了同样的问题,并通过将我的用户添加到 docker 组来解决它:

      $ sudo usermod -aG docker $(whoami)
      

      【讨论】:

        【解决方案6】:

        我使用的 Dockerfile 位于我的虚拟机 (VirtualBox) 的共享目录中。因此,我的问题与该目录的默认权限(UID=root,GID=vboxdf)有关。我必须将其更改为我当前的用户才能正确运行我的容器。

        有关如何更改所有者的说明,请参阅 https://superuser.com/a/640028/1655184

        【讨论】:

          【解决方案7】:

          对我来说,这是 Windows 上的 WSL2 / Docker-Desktop 设置问题。

          缺少的是显式启用 WSL 发行版:Docker Desktp 设置 > 资源 > WSL 集成 > 启用您的发行版

          然后重新打开 WSL shell。

          之前我什至无法执行docker run hello-world,但在运行 docker-compose 时也出现了与 OP 非常相似的错误消息。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-07-17
            • 2016-07-25
            • 2018-11-18
            • 2020-07-01
            • 2016-11-12
            • 2020-06-06
            • 2021-11-11
            • 2020-02-27
            相关资源
            最近更新 更多