django 权限错误:[Errno 13]权限被拒绝:'/manage.py'

w7t8yxp5  于 2022-11-18  发布在  Go
关注(0)|答案(9)|浏览(190)

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

停靠文件如下:

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。

yk9xbfzb

yk9xbfzb1#

ubuntu 21.04版本

我来这里寻找PermissionError: [Errno 13] Permission denied:,所以我就把这个留在这里。

**注意:**以下答案不适用于多用户系统... see this answer instead for another possible solution

如果你想设置它,忘记它为1个用户,你自己的用户...这里是我在我的开发机器上。
我不拥有unix socket,所以我改变了它。(这让它立即工作)

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

另一个更持久的解决方案是修改unix socket创建的用户所有权,这将给予用户所有权,这样它将在两次重新启动之间保持不变:

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

puruo6ea

puruo6ea2#

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

RUN adduser -D dockuser
USER dockuser

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

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

  • 使用/ www.example.com文件的停靠文件中的chownchmod命令为用户dockuser提供适当的权限manage.py。

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

carvr3hs

carvr3hs3#

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

$ sudo usermod -aG docker $(whoami)
wlzqhblo

wlzqhblo4#

将以下内容添加到RUN adduser -D dockuser之后的Dockerfile中:

RUN chown dockuser:dockuser -R /app/

如果已经挂载了文件,为什么还要对它们执行COPY操作?
如果要保留挂接,则需要在HOST系统上的文件夹上而不是在Container上添加rw权限

uxh89sit

uxh89sit5#

如果你在mac上,这可能对你有用。
经过4天的故障排除这个错误(和其他奇怪的错误),我发现我需要修复我的文件系统中的dockers权限。要做到这一点,请访问:

系统首选项-〉安全与隐私-〉隐私选项卡-〉全磁盘访问(在左侧,列表中的某个位置)-〉单击+ -〉Docker应用程序

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

d5vmydt9

d5vmydt96#

我使用的Dockerfile位于我的虚拟机(VirtualBox)的共享目录中。因此,我的问题与此目录的默认权限有关(UID=root,GID=vboxdf)。我必须将其更改为我的当前用户才能正确运行我的容器。
有关如何更改所有者的说明,请参见https://superuser.com/a/640028/1655184

dgtucam1

dgtucam17#

对我来说,这是一个WSL 2/ Docker-Desktop在Windows上的安装问题。
缺少的是显式启用WSL发行版:Docker桌面设置〉资源〉WSL集成〉启用您的发行版
然后重新打开WSL shell。
以前我甚至不能做docker run hello-world,但也有一个非常类似的错误消息,作为操作程序时,运行docker-compose。

cvxl0en2

cvxl0en28#

在docker-compose中添加“/home/user/app:/app”这样的应用程序路径,而不仅仅是".:/app",这解决了我的问题

qvtsj1bj

qvtsj1bj9#

对于ubuntu,只需将sudo添加到命令中,然后以root身份运行即可获得权限。
sudo docker-compose run app sh -c "django-admin startproject app ."

相关问题