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

从Docker镜像创建Singularity容器后无法找到MuJoCo二进制文件

Docker转Singularity容器后MuJoCo依赖报错问题

我将Docker镜像转换为Singularity容器后,出现了Docker环境中未发生的依赖错误。

Docker镜像构建代码

FROM ubuntu:22.04

WORKDIR /app

SHELL ["/bin/bash", "-c"] 

RUN echo "Hello World!"
RUN apt-get update && apt-get install -y \
    libosmesa6-dev \
    sudo \
    wget \
    curl \
    unzip \
    gcc \
    g++ \
    &&  apt-get install \
    libosmesa6-dev \
    && rm -rf /var/lib/apt/lists/*
    
ENV DEBIAN_FRONTEND=noninteractive

ENV PATH="/miniconda3/bin:${PATH}"
ARG PATH="/miniconda3/bin:${PATH}"
RUN cd / \
    && mkdir -p /miniconda3 \
    && wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /miniconda3/miniconda.sh \
    && bash /miniconda3/miniconda.sh -b -u -p /miniconda3 \
    && /miniconda3/bin/conda init bash \
    && source ~/.bashrc \
    && conda init \
    && conda create -y -n myenv python=3.8 \
    && conda update -y conda
    
WORKDIR /~
RUN wget https://roboti.us/download/mjpro150_linux.zip \
    && unzip mjpro150_linux.zip \
    && mkdir ~/.mujoco \
    && mv mjpro150 ~/.mujoco \
    && wget https://roboti.us/file/mjkey.txt \
    && mv mjkey.txt ~/.mujoco \
    && rm mjpro150_linux.zip


RUN cd /miniconda3/envs/myenv/lib/ && mv libstdc++.so.6 libstdc++.so.6.old && ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6
SHELL ["conda", "run", "-n", "myenv", "/bin/bash", "-c"]
EXPOSE 5003


RUN pip install --no-cache-dir "Cython<3" \
    && pip install mujoco-py==1.50.1.0 \
    && pip install gym

Docker镜像构建、运行及测试

执行以下命令构建并运行Docker容器:

docker build -t dockercontainer:latest .
docker run -it dockercontainer:latest 

进入容器后执行测试命令,可正常运行(仅少量警告):

conda run -n myenv python -c"import gym; gym.make('Humanoid-v3')"

Singularity容器构建与运行

从Docker镜像构建Singularity容器:

singularity build singularity_container.sif docker-daemon://dockercontainer:latest

运行Singularity容器时执行测试命令:

singularity exec singularity_container.sif conda run -n myenv python -c"import gym; gym.make('Humanoid-v3')"

报错信息

File "/home/thoma/.local/lib/python3.8/site-packages/mujoco_py/config.py", line 37, in init_config
    raise error.MujocoDependencyError('Found your MuJoCo license key but not binaries. Please put your binaries into ~/.mujoco/mjpro131 or set MUJOCO_PY_MJPRO_PATH. Follow the instructions on https://github.com/openai/mujoco-py for setup.')
mujoco_py.error.MujocoDependencyError: Found your MuJoCo license key but not binaries. Please put your binaries into ~/.mujoco/mjpro131 or set MUJOCO_PY_MJPRO_PATH. Follow the instructions on https://github.com/openai/mujoco-py for setup.

ERROR conda.cli.main_run:execute(124): `conda run python -cimport gym; gym.make('Humanoid-v3')` failed. (See above for error)

问题原因及解决方案

核心原因

  1. Singularity目录绑定特性:Singularity默认会绑定宿主的~/.mujoco目录到容器内,覆盖容器中预先安装的mjpro150文件,导致容器无法找到正确的二进制文件。
  2. 版本路径不匹配:mujoco-py v1.50.1.0默认查找mjpro131,但你安装的是mjpro150,未明确指定路径时会触发版本不匹配报错。

解决方法

方法1:运行时禁用宿主目录绑定

执行Singularity命令时添加--no-home参数,避免宿主home目录覆盖容器内的目录:

singularity exec --no-home singularity_container.sif conda run -n myenv python -c"import gym; gym.make('Humanoid-v3')"

或仅排除~/.mujoco的绑定:

singularity exec --bind '~/.mujoco:/dev/null' singularity_container.sif conda run -n myenv python -c"import gym; gym.make('Humanoid-v3')"

方法2:在Docker镜像中预设环境变量

修改Dockerfile,添加环境变量明确指定MuJoCo路径,避免依赖默认查找逻辑:

# 在Dockerfile中添加以下内容(建议放在安装MuJoCo之后)
ENV MUJOCO_PY_MJPRO_PATH="/root/.mujoco/mjpro150"
ENV LD_LIBRARY_PATH="/root/.mujoco/mjpro150/bin:${LD_LIBRARY_PATH}"

重新构建Docker镜像后再转换为Singularity容器。

方法3:运行时临时指定环境变量

直接在Singularity命令中设置环境变量,清除宿主环境干扰:

singularity exec -e singularity_container.sif bash -c "export MUJOCO_PY_MJPRO_PATH=/root/.mujoco/mjpro150 && export LD_LIBRARY_PATH=/root/.mujoco/mjpro150/bin:\$LD_LIBRARY_PATH && conda run -n myenv python -c'import gym; gym.make(\"Humanoid-v3\")'"

其中-e参数会隔离宿主环境变量,防止冲突。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:34:54