当前位置: 首页 > 知识库问答 >
问题:

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

蓝昊天
2023-03-14

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

警告:以“root”用户身份运行pip可能会导致权限中断以及与系统包管理器的行为冲突。建议改用虚拟环境

如果我在映像中安装Python需求,为什么它会抛出这个警告?我正在使用以下工具构建我的形象:

sudo docker build -t my_app:1 .

我应该担心警告皮普投掷,因为我知道它会破坏我的系统吗?

这是我的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"]

共有3个答案

王俊哲
2023-03-14

我不喜欢忽视警告,因为有一天你会监督一个重要的警告。

这里很好地解释了使用python的最佳docker实践。使用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 && \
    ...
翁昊乾
2023-03-14

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

通常情况下,花费时间在图像中创建虚拟环境或在另一个答案中添加用户不会有回报,只是为了避免警告,因为你不应该对此有任何问题。

只需检查pip-V和pip3-V,就可以知道当您想要为Python 3安装pip时,是否需要注意不要错误地为Python 2使用pip。

水铭晨
2023-03-14

容器的构建方式并没有添加用户,所以一切都是作为根用户完成的。

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

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"]
 类似资料:
  • 我使用Ansible安装了Nginx。要在Centos7上安装,我使用了yum软件包,因此默认情况下它是以root用户身份运行的。我希望它在Centos中以不同的用户(前nginx用户)身份启动和运行。当我尝试与其他用户一起运行时,会出现以下错误: nginx的工作。服务失败,因为控制进程已退出,错误代码为。有关详细信息,请参阅“systemctl status nginx.service”和“j

  • 本文向大家介绍以非root用户身份运行Docker容器,包括了以非root用户身份运行Docker容器的使用技巧和注意事项,需要的朋友参考一下 当您在Docker容器中运行应用程序时,默认情况下,它有权访问所有root特权。您可能已经注意到,当打开Ubuntu Docker Container Bash时,默认情况下您以root用户身份登录。在应用程序的安全性方面,这可能是一个主要问题。任何局外人

  • 我正在尝试以root用户身份运行脚本。这是我的密码 它在出错 我也遵循了这些方法,但最终出现了错误

  • 问题内容: Docker 博客文章指出: 默认情况下,Docker容器是相当安全的。特别是如果您要以非特权用户(即非root用户)的身份在容器内运行进程。” 那么,如果我以root用户身份在docker下运行,安全问题是什么?我的意思是,如果我以非特权用户身份处理我的进程,这是非常安全的,那么,以root用户身份托管在容器中怎么会对我有害?我只是想让它理解它,如果以root身份运行时它不安全,那么

  • 我最近开始使用Jenkins进行集成。在没有shell命令的情况下在主节点上运行作业之前,一切都很好,但我必须在主节点和从节点上运行作业,从节点包含要运行的shell命令。我无法以root用户身份运行这些shell命令。我试过了 使用 在shell命令中设置用户名 使用 每次使用上述任何一种方法时,我都会遇到错误。

  • 问题内容: 在昨天的Shocker消息发布之后,似乎Docker容器中的应用程序不应以root用户身份运行。我尝试更新自己以创建应用程序用户,但是更改对应用程序文件的权限(虽然仍然是root)似乎不起作用。我猜这是因为未将某些LXC权限授予root用户? 这是我的Dockerfile: 很简单,但是当我一切仍然由root拥有时: 感谢@creak对卷的工作原理的澄清,我更新的dockerfile的