基于Azure Linux镜像构建Python应用时pip安装在Ubuntu主机失败
Docker构建Python应用时pip报错:RuntimeError: can't start new thread
我们使用mcr.microsoft.com/azurelinux/base/python:3.12.3-4-azl3.0.20241101-amd64作为基础镜像构建Python应用。在Ubuntu 18.04或22.04主机执行docker build时,Dockerfile中的pip命令出现如下错误,但在RHEL 8主机上构建可正常运行。
错误信息
Downloading pygments-2.18.0-py3-none-any.whl.metadata (2.5 kB) Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.12.3->fastapi-cli>=0.0.5->fastapi-cli[standard]>=0.0.5; extra == "standard"->fastapi[standard]==0.115.5->-r requirements.txt (line 1)) Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB) Downloading fastapi-0.115.5-py3-none-any.whl (94 kB) Downloading httpx-0.27.2-py3-none-any.whl (76 kB) Downloading langchain-0.3.7-py3-none-any.whl (1.0 MB) ERROR: Exception: Traceback (most recent call last): File "/usr/lib/python3.12/site-packages/pip/_internal/cli/base_command.py", line 105, in _run_wrapper status = _inner_run() ^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pip/_internal/cli/base_command.py", line 96, in _inner_run return self.run(options, args) ^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pip/_internal/cli/req_command.py", line 67, in wrapper return func(self, options, args) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pip/_internal/commands/install.py", line 379, in run requirement_set = resolver.resolve( ^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 179, in resolve self.factory.preparer.prepare_linked_requirements_more(reqs) File "/usr/lib/python3.12/site-packages/pip/_internal/operations/prepare.py", line 554, in prepare_linked_requirements_more self._complete_partial_requirements( File "/usr/lib/python3.12/site-packages/pip/_internal/operations/prepare.py", line 469, in _complete_partial_requirements for link, (filepath, _) in batch_download: File "/usr/lib/python3.12/site-packages/pip/_internal/network/download.py", line 184, in __call__ for chunk in chunks: File "/usr/lib/python3.12/site-packages/pip/_internal/cli/progress_bars.py", line 54, in _rich_progress_bar with progress: File "/usr/lib/python3.12/site-packages/pip/_vendor/rich/progress.py", line 1168, in __enter__ self.start() File "/usr/lib/python3.12/site-packages/pip/_vendor/rich/progress.py", line 1159, in start self.live.start(refresh=True) File "/usr/lib/python3.12/site-packages/pip/_vendor/rich/live.py", line 132, in start self._refresh_thread.start() File "/usr/lib/python3.12/threading.py", line 992, in start _start_new_thread(self._bootstrap, ()) RuntimeError: can't start new thread The command '/bin/sh -c pip3 install --no-cache-dir -r requirements.txt' returned a non-zero code: 2
requirements.txt内容
fastapi[standard]==0.115.5 httpx==0.27.2 langchain==0.3.7 langchain-core==0.3.19 langchain_community==0.3.2 langchain-openai==0.2.9 langchain-text-splitters==0.3.2 logger==1.4 openai==1.54.5 pandas==2.2.3 pydantic==2.9.2 pydantic_core==2.23.4 pytest==8.3.3 pytest-cov==6.0.0 pytest-integration-mark==0.2.0 pytest-mock==3.14.0 python-dotenv==1.0.1 requests==2.32.3 rank-bm25==0.2.2 six==1.16.0
Dockerfile内容
FROM mcr.microsoft.com/azurelinux/base/python:3.12.3-4-azl3.0.20241101-amd64 WORKDIR /app COPY requirements.txt /app COPY ./pip.conf ~/.pip/ RUN pip3 install --no-cache-dir -r requirements.txt .............. .............
解决办法
修改pip install命令禁用进度条
将Dockerfile中的RUN命令改为:RUN pip3 install --no-cache-dir --no-progress-bar -r requirements.txt该参数会阻止pip使用rich进度条,避免创建新线程的操作,直接绕过错误。
通过pip配置全局关闭进度条
在pip.conf中添加以下配置:[global] progress-bar = off确保COPY命令正确将配置文件复制到容器内的
~/.pip/路径。检查主机线程资源限制
在Ubuntu主机执行ulimit -u查看用户最大进程数(线程包含在内),如果数值过低,可临时调整:ulimit -u 4096也可修改
/etc/security/limits.conf文件永久调整,但此方法通常不是必需的,默认限制足以应对pip构建场景。
内容的提问来源于stack exchange,提问作者Vowneee
相关产品推荐
相关产品推荐

