You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker构建Conda环境报错137,求修复方案或替代方法

解决方案:Docker构建Conda环境OOM错误(代码137)修复及替代方案

一、修复Conda构建的内存问题

1. 核心问题排查

你当前的Dockerfile存在环境名不匹配的错误:environment.yaml定义的环境名是oneposeplus,但后续SHELL命令中写的是myenv,这会导致后续步骤失败;同时代码137本质是内存不足,即使分配了16G,Conda默认的求解器和并行策略仍可能占用过多内存。

2. 优化后的Conda方案Dockerfile

FROM condaforge/miniforge3

WORKDIR /OnePose_Plus_Plus-main

# 配置Conda使用轻量求解器,限制线程数降低内存占用
RUN conda config --set solver libmamba && \
    conda config --set max_threads 2

COPY environment.yaml .
RUN conda env create -f environment.yaml 

# 修正环境名,与yaml文件保持一致
SHELL ["conda", "run", "-n", oneposeplus, "/bin/bash", "-c"]

# 验证环境(如果requirements.txt包含flask则执行,否则可移除)
RUN echo "检查依赖是否安装完成"
RUN python -c "import torch; print(torch.__version__)"

COPY run.py .
ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", oneposeplus, "python", "run.py"]
  • 使用miniforge3替代miniconda3:默认基于conda-forge,镜像更轻量,依赖解析更高效
  • 启用libmamba求解器:相比Conda默认的classic求解器,内存占用降低60%以上,构建速度更快
  • 限制线程数:避免并行下载/解析时占用过多内存

二、无需Conda的替代方案:Python官方镜像+Virtualenv

如果Conda仍无法解决内存问题,可改用纯Pip+虚拟环境方案,内存占用更低:

FROM python:3.7-slim

WORKDIR /OnePose_Plus_Plus-main

# 安装编译依赖(部分Python包需要编译)
RUN apt-get update && apt-get install -y --no-install-recommends \
    gcc g++ git build-essential libssl-dev libffi-dev \
    && rm -rf /var/lib/apt/lists/*

# 创建并激活虚拟环境
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"

# 先安装PyTorch(对应原环境的CUDA 10.1版本)
RUN pip install --no-cache-dir torch==1.8.0 torchvision==0.9.1 -f https://download.pytorch.org/whl/cu101/torch_stable.html

# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt \
    ipython tqdm matplotlib pylint jupyterlab h5py==3.1.0 loguru==0.5.3 scipy numba ipdb albumentations==0.5.1

COPY run.py .
ENTRYPOINT ["python", "run.py"]
  • 用python:3.7-slim镜像:体积仅为miniconda3的1/3,内存占用更低
  • --no-cache-dir参数:避免pip缓存占用额外内存
  • 虚拟环境隔离:实现与Conda相同的环境隔离效果,但资源消耗更少

三、额外排查建议

  • 检查宿主机内存:用free -h确认宿主机可用内存是否真的充足,Docker分配的内存不能超过宿主机剩余内存
  • 调整Docker daemon限制:如果使用Docker Desktop,需在设置中调整Docker引擎的内存上限(而非仅build时指定参数)
  • 清理构建缓存:执行docker builder prune清理旧缓存,避免缓存中的错误影响构建

内容的提问来源于stack exchange,提问作者brian2lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:32:50