警告:以“root”用户身份运行 pip

问题描述 投票:0回答:5

我正在 Docker 中制作我的 python Django 应用程序的简单图像。但在构建容器结束时,它会抛出下一个警告(我在 Ubuntu 20.04 上构建它):

WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead

如果我在映像中安装 Python 要求,为什么会抛出此警告?我正在使用以下方式构建我的图像:

sudo docker build -t my_app:1 .

我是否应该担心 pip 抛出的警告,因为我知道它会破坏我的系统?

这是我的 Dockerfile:

FROM python:3.8-slim-buster

WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
python django docker ubuntu pip
5个回答
82
投票

此行为是在 pip

21.1
中作为“错误修复”引入的。

pip

22.1
开始,您现在可以使用参数选择退出警告:

pip install --root-user-action=ignore

您可以通过使用环境来忽略容器中的这一点:

ENV PIP_ROOT_USER_ACTION=ignore

#11035


61
投票

容器的构建方式不会添加用户,因此一切都以 root 身份完成。

您可以创建一个用户并通过执行以下操作安装到该用户的主目录;

FROM python:3.8.3-alpine

RUN pip install --upgrade pip

RUN adduser -D myuser
USER myuser
WORKDIR /home/myuser

COPY --chown=myuser:myuser requirements.txt requirements.txt
RUN pip install --user -r requirements.txt

ENV PATH="/home/myuser/.local/bin:${PATH}"

COPY --chown=myuser:myuser . .

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

31
投票

更新220930

这里答案的好消息是您可以忽略警告,但忽略警告对于pip版本>=22.1来说不再是最佳实践。在撰写此答案时,我还不知道 pip 版本 >=

22.1
的新技巧。
pip版本>=

22.1

遵循

Maximilian Burszley

的答案。在撰写本文时我还不知道这一点,并且允许您使用一个很小的参数来避免警告。 pip 版本 >=

21.1

22.1
<
您可以忽略此警告,因为您创建映像是出于隔离目的,因此它在组织上与虚拟环境一样隔离。从技术上讲不是,但这并不重要。

为了避免警告而投入时间并在映像中创建虚拟环境或添加用户(如其他答案中所示)通常不会有回报,因为您不应该对此有任何问题。它可能会在调试期间遮蔽您的视图,但不会阻止代码工作。

只要检查

pip -V

pip3 -V
就知道你是否需要注意,当你想要
pip
用于 Python 3 时,不要错误地将
pip
用于 Python 2。但应该是这样,如果你只安装 pip对于 python 3,无论如何你都不会有这个问题。
点子版本

21.1

<
在这些旧版本中,无论如何都不会弹出警告,请再次查看其他答案。从问题的年龄也可以清楚地看出,这个警告在旧版本中没有出现。


13
投票

Here

很好地解释了 Python 的最佳 docker 实践。搜索Example with virtualenv,你会发现这个:

# temp stage
FROM python:3.9-slim as builder

WORKDIR /app

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN apt-get update && \
    apt-get install -y --no-install-recommends gcc

RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"

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


# final stage
FROM python:3.9-slim

COPY --from=builder /opt/venv /opt/venv

WORKDIR /app

ENV PATH="/opt/venv/bin:$PATH"

就像魅力一样。没有警告或类似内容。顺便说一句,出于安全原因,他们还建议创建一个非 root 用户。

编辑:

要消除所有警告,您可能还需要将以下条目添加到 Dockerfile 的构建器部分(适用于 Debian 8.3.x): ARG DEBIAN_FRONTEND=noninteractive ARG DEBCONF_NOWARNINGS="yes" RUN python -m pip install --upgrade pip && \ ...



0
投票

pip install --upgrade pip pip install --root-user-action=ignore requests

pip3

pip3 install --upgrade pip pip3 install --root-user-action=ignore requests

© www.soinside.com 2019 - 2023. All rights reserved.