使用venv还是不使用venv的Docker?

3

我刚开始学习Docker,我的问题是是否必须在Docker中使用venv,还是它并不重要?因为我无法在Docker中配置venv,它会给我一个错误,例如无法导入Django激活venv...,我阅读了一些答案但无法获得答案,有人说需要使用venv,而其他人则说并不重要。

我的Dockerfile

FROM python:3.8

#set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN python3 -m venv venv

#Set work directory
WORKDIR /code/

#Install dependencies
COPY requirements.txt .
RUN . /venv/bin/activate && pip install -r requirements.txt

COPY . /code/

如果我不使用虚拟环境venv,Docker可以正常运行,但是当安装软件包时,会给出警告,例如“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:...”。有人能清楚地解释一下这是什么意思吗?感谢您的帮助。

1
在 Docker 中使用 venv 在我看来完全是不必要的。我从未使用过它,也从未遇到任何问题,不使用它稍微简单一些。 - Iain Shelvington
如果您对此消息感到烦恼,您可以在Dockerfile中添加新用户,并在pip命令中指定--user标志来安装用户主目录中的内容,但正如@IainShelvington已经说过的那样,这是完全不必要的。无论如何,问题都是重复的:https://dev59.com/_lEG5IYBdhLWcg3wSZIS - w8eight
1
这个回答解决了你的问题吗?[警告:以'root'用户身份运行pip] (https://dev59.com/_lEG5IYBdhLWcg3wSZIS) - w8eight
我想要一个详细的解释,为什么要在Docker中使用venv以及为什么不要使用。 - mirodil
1个回答

3
Docker和Python virtualenv有什么区别?

virtualenv只封装Python依赖项,而Docker容器则封装整个操作系统。

换句话说,Docker容器类似于虚拟环境,但它封装的是自己的操作系统而不是项目环境。这意味着在Docker容器中使用虚拟环境是无用的,因为环境已经被封装了。


这太棒了! - Manu

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