【问题标题】:Permission denied: '/app/manage.py' Docker权限被拒绝:'/app/manage.py' Docker
【发布时间】:2021-04-12 14:50:30
【问题描述】:

我在尝试运行 docker-compose 命令时遇到权限问题

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

错误:

PermissionError: [Errno 13] Permission denied: '/app/manage.py'

我做了一些研究,在这里发现了一个类似的问题:docker-compose , PermissionError: [Errno 13] Permission denied: '/manage.py'

但是,当我尝试更改 Dockerfile 中的权限时,我认为我做错了

Dockerfile:

FROM python:3.8-alpine
MAINTAINER Nick

ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt

RUN mkdir /app
WORKDIR /app
COPY ./app /app

RUN adduser -D user
RUN chown user:user -R /app/
RUN chmod +x /app
USER user

我添加RUN chown user:user -R /app/RUN chmod +x /app

运行docker build . 成功,但我仍然遇到权限问题

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"

【问题讨论】:

  • 您好 Nick,您是否尝试过在没有最后四个运行命令的情况下构建 Dockerfile?入口点或 cmd 行呢?您是否在帖子中添加了整个 Dockerfile?
  • 我没有尝试在没有最后四个命令的情况下构建文件。我已经阅读了创建新用户的最佳做法,以便图像不使用 root 用户。此外,我在这篇文章中的 docker 文件中包含了所有内容。
  • 感谢您的反馈,我这里有点疑问。您是否从 macOS 测试了该 docker 构建?确保您正确设置了这些设置。系统偏好设置 -> 安全和隐私 -> 隐私选项卡 -> 全盘访问(在左侧,在列表中的某处) -> 点击 + -> Docker 应用程序
  • 你正在做chown user:user -R /app/ 然后在你的docker compose中运行时在/app之上安装一个文件夹。如果你认为你的镜像中做的chown会对之后挂载的文件有影响,那你就错了。

标签: django linux docker


【解决方案1】:

看来您的 Django 项目运行良好,我已尝试重现您的错误,但无法得到它。

我的目录树:

.
|____app
| |____app
| | |____asgi.py
| | |______init__.py
| | |____settings.py
| | |____urls.py
| | |____wsgi.py
| |____manage.py
|____requirements.txt
|____Dockerfile
|____docker-compose.yml

requirements.txt

Django==3.1.5

Dockerfile:

FROM python:3.8-alpine

ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt

RUN mkdir /app
WORKDIR /app
COPY ./app /app

RUN adduser -D user
RUN chown user:user -R /app/
RUN chmod +x /app
USER user

Docker-compose:

version: "3"

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

我的步骤:

  1. django-admin 启动项目应用程序
  2. docker-compose 构建应用程序
  3. 码头工人组成

输出:

Creating django-3-1-5_app_1 ... done
Attaching to django-3-1-5_app_1
app_1  | Watching for file changes with StatReloader
app_1  | Performing system checks...
app_1  |
app_1  | System check identified no issues (0 silenced).
app_1  |
app_1  | You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
app_1  | Run 'python manage.py migrate' to apply them.
app_1  | January 06, 2021 - 21:03:42
app_1  | Django version 3.1.5, using settings 'app.settings'
app_1  | Starting development server at http://0.0.0.0:8000/
app_1  | Quit the server with CONTROL-C.
app_1  | [06/Jan/2021 21:03:52] "GET / HTTP/1.1" 200 16351
app_1  | [06/Jan/2021 21:03:52] "GET /static/admin/css/fonts.css HTTP/1.1" 200 423
app_1  | [06/Jan/2021 21:03:52] "GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1" 200 85876
app_1  | [06/Jan/2021 21:03:52] "GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1" 200 85692
app_1  | [06/Jan/2021 21:03:52] "GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1" 200 86184
app_1  | Not Found: /favicon.ico
app_1  | [06/Jan/2021 21:03:52] "GET /favicon.ico HTTP/1.1" 404 1969
^CGracefully stopping... (press Ctrl+C again to force)
Stopping django-3-1-5_app_1 ... done

浏览器:

我在想,你有另一种烫发问题,你有没有尝试从 MacOS 构建这个镜像?

试试下面的配置:

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

希望对您和其他用户有所帮助。

【讨论】:

  • 太棒了,这可能是一篇杂志文章!祝大家好运!
  • 太好了,希望我的帖子对你有用;)
【解决方案2】:

不管什么原因改变我的

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"

version: "3"

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

我将- ./app /app 修改为- ./app:/app。它解决了这个问题。如果有人有解释那就太好了。

感谢您的帮助。

【讨论】:

  • 我对 docker 一无所知,但是在路径列表中添加 : 看起来就像在 *nix 领域中编写 PATH 列表的传统方法,即 PATH=/usr/local/bin:/usr/bin:/bin:./bin。请注意,我已经包含了./bin,与程序启动的基本路径相比,它是一个相对路径(通常是/home/$USER。很高兴你解决了你的问题!祝大家好运!
猜你喜欢
  • 2011-08-20
  • 2019-11-09
  • 2023-03-22
  • 2021-07-15
  • 1970-01-01
  • 2020-08-31
  • 2021-11-05
  • 2022-01-18
  • 2022-01-03
相关资源
最近更新 更多