V.D*_*.D. 8 python django ubuntu pip docker
我正在 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"]
Run Code Online (Sandbox Code Playgroud)
The*_*le1 111
此行为是作为“错误修复”引入pip中的。21.1
从pip22.1开始,您现在可以使用参数选择退出警告:
pip install --root-user-action=ignore
Run Code Online (Sandbox Code Playgroud)
您可以使用以下环境在容器中忽略这一点:
ENV PIP_ROOT_USER_ACTION=ignore
Run Code Online (Sandbox Code Playgroud)
que*_*o42 35
这个答案的好消息是您可以忽略警告,但对于 pip version >= 来说,忽略警告不再是最佳实践22.1。在撰写此答案时,22.1我还不知道 pip version >= 的新技巧。
22.1请遵循Maximilian Burszley的回答。在撰写本文时我还不知道这一点,并且允许您通过一个很小的参数来避免警告。
21.1和 <22.1您可以忽略此警告,因为您创建映像是出于隔离目的,因此它在组织上与虚拟环境一样隔离。从技术上讲不是,但这在这里并不重要。
投入时间并在映像中创建虚拟环境或添加用户(如其他答案中那样只是为了避免警告)通常不会有回报,因为您不应该对此有任何问题。它可能会在调试期间遮蔽您的视图,但不会阻止代码工作。
只要检查pip -V一下pip3 -V就知道是否需要注意不要pip在需要时误用为Python 2pipPython 3的时候错误地使用Python 2。但应该是这样,如果你只安装Python 3的pip,无论如何都不会有这个问题。
21.1在这些旧版本中,无论如何都不会弹出警告,请再次查看其他答案。从问题的年龄也可以清楚地看出,这个警告在旧版本中没有出现。
Hey*_*Man 15
我不喜欢忽视警告,因为有一天你会监督一个重要的警告。
这是关于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"
Run Code Online (Sandbox Code Playgroud)
就像魅力一样起作用。没有警告或类似内容。顺便说一句,出于安全原因,他们还建议创建一个非 root 用户。
编辑:要消除所有警告,您可能还需要将以下条目添加到 Dockerfile 的构建器部分(适用于Debian 8.3.x):
ARG DEBIAN_FRONTEND=noninteractive
ARG DEBCONF_NOWARNINGS="yes"
RUN python -m pip install --upgrade pip && \
...
Run Code Online (Sandbox Code Playgroud)
容器的构建方式不会添加用户,因此一切都以 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"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1292 次 |
| 最近记录: |