在Docker容器中使用Pip安装包时出现“Permission Denied”错误的解决方法-Django

4
我无法在我的Docker容器中安装软件包,请告诉我如何解决。
警告:
警告:目录“/home/app/.cache/pip”或其父目录不属于当前用户或不可写。缓存已被禁用。请检查该目录的权限和所有者。如果使用sudo执行pip,则应使用sudo的-H标志。
错误:
ERROR: Could not install packages due to an OSError: [Errno 13] Permission denied: '/home/app'
Check the permissions.

Dockerfile:

FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

WORKDIR /app
EXPOSE 8000

COPY ./core/ /app/
COPY ./scripts /scripts

RUN pip install --upgrade pip
COPY requirements.txt /app/
RUN pip install -r requirements.txt && \
    adduser --disabled-password --no-create-home app && \
    mkdir -p /vol/web/static && \
    mkdir -p /vol/web/media && \
    chown -R app:app /vol && \
    chmod -R 755 /vol && \
    chmod -R +x /scripts

USER app

CMD ["/scripts/run.sh"]

容器内的命令:

pip install django-storages

通常情况下,您不会在正在运行的容器内运行 pip install,因为以这种方式进行的任何更改都将在容器退出时丢失。您可以将软件包添加到 requirements.txt 中,重新构建镜像并重新创建容器吗? - David Maze
@DavidMaze 我已经在requirements.txt文件中添加了该软件包,但我目前处于开发模式,因此每次安装任何软件包时重建Docker镜像并不是一个好方法。 - Zain Khan
2个回答

4

在我的情况下,我已经使用root用户安装了该软件包,通过添加-u 0的方式告诉docker以root用户身份登录。

docker exec -u 0 -it mycontainer bash

0

您的用户目录'/home/app'不存在或权限不正确。

看起来您正在向adduser传递--no-create-home,这可能是您的问题所在。

(对于其他人,如果要创建我的用户,我使用的是RUN useradd -u 1000 app,但由于某些原因我的主目录未被创建...改用RUN adduser --uid 1000 --disabled-password app对我有用。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接