提问者:小点点

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组合。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"

我在这个堆栈溢出线程中应用了建议的解决方案,但它不起作用。

我使用的是Ubuntu 18.04。


共3个答案

匿名用户

我在这里搜索权限错误:[错误13]权限被拒绝:所以我就把这个留在这里。

我没有unix套接字,所以我把它拿走了。

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

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

sudo nano /etc/systemd/system/sockets.target.wants/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

匿名用户

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

RUN adduser -D dockuser
USER dockuser

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

你也可以

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

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

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

匿名用户

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

RUN chown dockuser:dockuser -R /app/

如果您已经挂载了文件,为什么要复制这些文件?

如果要保留装载,需要将rwpermission添加到主机系统上的文件夹中,而不是容器