docker容器中执行pip安装命令报Can‘t start new thread错误解决方法

文章讲述了在Docker20.x版本与高版本基础镜像(如Ubuntu22.04,Debian12)结合时,由于glibc的改变导致的多线程问题。提供了解决方案,包括使用低版本镜像、升级Docker或临时关闭pip进度条以避免新线程冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错细节:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "<stdin>", line 2, in <dictcomp>
  File "/usr/lib64/python3.8/concurrent/futures/thread.py", line 188, in submit
    self._adjust_thread_count()
  File "/usr/lib64/python3.8/concurrent/futures/thread.py", line 213, in _adjust_thread_count
    t.start()
  File "/usr/lib64/python3.8/threading.py", line 852, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

错误原因:docker版本过低(version 20.x)而容器对应的基础镜像版本过高,如Ubuntu22.04、Debian12等,执行程序时程序无法多线程执行。可参考:

This is because the default seccomp profile of Docker 20.10.9 is not adjusted to support the clone() syscall wrapper of glibc 2.34 adopted in Ubuntu 21.10 and Fedora 35.

 解决方法:

1、拉取低版本的镜像(Ubuntu20.04及以下版本、Debian11及以下版本),使用新镜像重新运行封装容器(推荐:不会影响已有的docker镜像与容器),如:

# 原始的高版本镜像
docker pull bitnami/pytorch:latest
docker pull bitnami/pytorch:2.2.2-debian-12-r0

# 新拉取的低版本镜像
docker pull bitnami/pytorch:2.0.0-debian-11-r0

2、卸载旧版本的docker,安装/升级docker至新版本(version 21.x以上),重新运行容器(不推荐:新版本安装过程时间长且容易带来其它问题,可能影响已有的docker镜像与容器);

sudo apt-get upgrade docker-ce

3、安装时,去除进度条显示(不推荐:去除进度条显示(关闭了进度条显示线程)只是保证pip在安装时仅有一个安装线程在执行,当再执行其它多线程程序时还会报其它错误)

# 一次性操作
pip install --progress-bar off opencv-python

# 永久操作
pip config --user set global.progress_bar off

参考博客:在docker中运行 pip 报错 Can‘t start new thread_docker can't start new thread-CSDN博客

### 如何使用 Docker 安装 LLaMA-Factory,需遵循一系列特定指令来设置环境。通过 Docker 进行部署可以简化这一过程。 #### 准备工作 确保本地机器已正确配置好 DockerDocker Compose 的环境。这一步骤对于后续操作至关重要[^4]。 #### 获取项目源码 从 GitHub 上克隆 LLaMA-Factory 仓库到本地计算机: ```bash git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory ``` #### 构建 Docker 镜像 在项目的根目录下执行构建命令以创建所需的 Docker 镜像: ```bash docker-compose build ``` 此过程中可能会遇到 `RuntimeError: can't start new thread` 错误,该问题是由于 Python 解释器线程资源耗尽引起,在多线程环境下较为常见。针对此类情况可尝试调整系统参数或优化代码逻辑减少并发量[^3]。 #### 启动服务 完成镜像构建之后,启动相关联的服务容器: ```bash docker-compose up -d ``` 上述 `-d` 参数表示以后台模式运行容器实例,使得终端不会被占用而能够继续其他操作。 #### 访问容器内部 当所有组件都正常运作后,可以通过如下方式进入到指定名称为 `llamafactory` 的容器内进行进一步的操作: ```bash docker compose exec llamafactory bash ``` 此时即进入了容器内的 Bash 终端环境中,允许用户在此基础上开展更多定制化开发或是调试活动[^1]。 #### 安装额外依赖项 如果需要向现有环境中添加新的软件包比如 PyTorch,则可以在容器里按照官方指南说明来进行安装: ```bash pip install "./torch-2.2.1+cu121-cp312-cp312-win_amd64.whl" --user ``` 注意路径应当指向实际存在的 wheel 文件位置,并且版本号要匹配当前系统的架构与需求[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值