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

新手上路,请多包涵

我正在 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"]

原文由 V.D. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 4k
2 个回答

构建容器的方式不会添加用户,因此一切都以 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"]

原文由 markwalker_ 发布,翻译遵循 CC BY-SA 4.0 许可协议

更新 220930

这个答案的好消息是您 可以 忽略警告,但忽略警告 不再 是 pip version >= 22.1 的最佳实践。在撰写此答案时,我还不知道 pip version >= 22.1 的新技巧。

pip 版本 >= 22.1

按照 Maximilian Burszley 的回答。在撰写本文时我还不知道它,它允许您通过一个很小的参数来避免警告。

pip 版本 >= 21.1 和 < 22.1

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

通常不应该投入时间并在图像中创建虚拟环境或像在其他答案中那样添加用户只是为了避免警告,因为您不应该对此有任何问题。它可能会在调试期间模糊您的视图,但它不会阻止代码工作。

Just check pip -V and pip3 -V to know whether you need to pay attention not to mistakenly use pip for Python 2 when you want pip for Python 3。但应该就是这样,如果你只为 python 3 安装 pip,你无论如何都不会遇到这个问题。

点子版本 < 21.1

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

原文由 questionto42standswithUkraine 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题