docker-compose,PermissionError:[Errno 13]权限被拒绝:'/manage.py'

时间:2019-06-27 05:30:29

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

经过大量研究,我发现没有任何解决方案对我有用。 我试图在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'

我的docker文件

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"

我应用了建议的解决方案,但没有成功 [PermissionError: [Errno 13] Permission denied: '/code/manage.py'

Ubuntu版本:

Distributor ID: Ubuntu
Description:    Ubuntu 18.04 LTS
Release:    18.04
Codename:   bionic

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

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

RUN adduser -D dockuser
USER dockuser

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

您可以

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

OR

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

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

答案 2 :(得分:1)

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

RUN chown dockuser:dockuser -R /app/

以及为什么COPY个文件已经挂载了呢?

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

答案 3 :(得分:1)

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

对这个错误(以及其他奇怪的错误)进行了4天的故障排除后,我发现我需要修复文件系统中的dockers权限。为此,请转到:

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

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