我应该以非 root 用户身份安装 Python 包还是设置虚拟环境以将它们安装在 Docker 容器内?

s.k*_*s.k 2 python pip docker

通过pip在 Dockerfile 中安装 Python 包时,例如:

pip install --trusted-host pypi.python.org -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

requirements.txt,例如:

python-dotenv>=0.15.0
psycopg2>=2.8.6
sqlalchemy>=1.3.22
numpy>=1.19.0
rasterio>=1.1.8
pandas>=1.1.5
geopandas>=0.8.1
matplotlib>=3.3.0
seaborn>=0.11.0
Run Code Online (Sandbox Code Playgroud)

我最近看到这个警告:

WARNING: Running pip as the 'root' user can result in broken permissions
and conflicting behavior with the system package manager.
It is recommended to use a virtual environment
instead: https://pip.pypa.io/warnings/venv
Run Code Online (Sandbox Code Playgroud)

因此,我提出了一个“天真的”问题:
像人们通常在本地计算机上所做的那样,以非 root 用户身份(这是 Docker 中的默认设置)设置虚拟环境/或安装 Python 包是否有意义?
目前我从来不关心这一点,因为我位于一个 Docker 容器内,根据定义,该容器托管一个应用程序,所以我认为这些包全局安装是完全可以的。希望我不会破坏本地机器上的任何东西。

Pau*_*tte 5

诚实地?没关系。

在构建容器期间使用 root 用户通常是必要和预期的。来自 pip 的警告是“以 root 身份运行 pip 可能会搞砸您的操作系统程序所依赖的软件包” - 但您的容器中没有操作系统。

如果您在构建结束时或在 docker 运行期间使用权限较低的用户,以 root 身份安装软件包不会对您造成任何伤害。实际上,容器是一个单一的进程(你的Python应用程序),它具有与根系统不同的文件系统视图——非常类似于 virtualenv 试图完成的任务。