容器镜像#
每种 配置 构建不同镜像。它们所包含的仿真与渲染栈不同,决定镜像大小及可运行内容。本页介绍镜像本身;构建或运行时,在 容器生命周期 中指定其配置名称。
选择镜像#
区域配置 |
包含内容 |
适用情况 |
|---|---|---|
|
基于 NVIDIA Isaac Sim 镜像的 Isaac Lab,包含 Kit 和 RTX 渲染 |
需要默认环境、图形界面渲染,或任何依赖 Isaac Sim 的功能 |
|
|
需要将 Isaac Lab 与 ROS 2 节点连接 |
|
Ubuntu 24.04、Python 3.12、Newton 和 OVPhysX 物理、OVRTX 渲染,以及四种强化学习库 |
使用 Newton 训练,希望镜像尽量小;也是唯一没有 Isaac Sim EULA 的镜像 |
基础镜像#
Dockerfile.base 在 Isaac Sim 容器上添加 Isaac Lab 依赖,因此继承 Kit、RTX 渲染和 Isaac Sim 资产管线。构建所用 Isaac Sim 版本由 .env.base 中的 ISAACSIM_VERSION 指定;该文件的其他变量控制容器内路径。
ROS 2 镜像#
Dockerfile.ros2 通过 apt 软件包 安装 ROS 2 Humble,并在运行时用户的 .bashrc 中加载其环境。 .env.ros2 的 ROS2_APT_PACKAGE 选择软件包集合,默认为 ros-base 。镜像默认使用 FastRTPS 中间件,也支持 CycloneDDS 。二者均可通过 docker/.ros 下的 .xml 文件 调优 ,取舍见 不同中间件 。
.env.ros2 中的参数
###
# ROS2 specific settings
###
# Set the version of the ROS2 apt package to install (ros-base, desktop, desktop-full)
ROS2_APT_PACKAGE=ros-base
# Set ROS2 middleware implementation to use (e.g. rmw_fastrtps_cpp, rmw_cyclonedds_cpp)
RMW_IMPLEMENTATION=rmw_fastrtps_cpp
# Path to fastdds.xml file to use (only needed when using fastdds)
FASTRTPS_DEFAULT_PROFILES_FILE=${DOCKER_USER_HOME}/.ros/fastdds.xml
# Path to cyclonedds.xml file to use (only needed when using cyclonedds)
CYCLONEDDS_URI=${DOCKER_USER_HOME}/.ros/cyclonedds.xml
# Docker image and container name suffix (default "", set by the container_interface.py script)
# Example: "-custom"
DOCKER_NAME_SUFFIX=""
不依赖 Kit 的镜像#
此镜像完全移除 Isaac Sim,基于 Ubuntu 24.04 和 Python 3.12 构建。它包含 Newton 物理、OVPhysX 物理、OVRTX 渲染,以及 RL Games、RSL-RL、Stable-Baselines3、SKRL 四种核心强化学习框架,也包含 newton_gl 、 newton_rtx 、 viser 和 rerun 可视化器。容器可访问显示器时,使用 --viz newton_gl 进行本地可视化。 --viz newton_gl 选择 OpenGL 光栅化器, --viz newton_rtx 选择 OVRTX 路径追踪器;两者都可不依赖 Isaac Sim 进行离屏渲染。窗口模式还要求容器内可访问显示服务器。已弃用的 --viz newton 别名选择 GL,不会自动在 GL 和 RTX 之间选择。
除计算能力外,渲染还需要 NVIDIA 图形驱动能力。直接使用 docker run 时,传入 --gpus all -e NVIDIA_DRIVER_CAPABILITIES=all 。NVIDIA Container Toolkit 会提供宿主机驱动,不要再挂载一份 Vulkan ICD。如果发现多个驱动,通过 VK_DRIVER_FILES 选择容器内可用的 NVIDIA ICD,例如 /etc/vulkan/icd.d/nvidia_icd.json 。
默认不选择可视化器,因此除非显式请求,训练以无界面模式运行。 kit 可视化器不可用,因为它来自本镜像未包含的 Omniverse Kit。
与另两种镜像相比,它除了绑定挂载 source 、 scripts 、 tools 和 docs ,还挂载 apps ,并维护独立的 uv 与 Warp 缓存。
无需在本地构建。它随每个 Isaac Lab 版本发布在同一镜像仓库,用 -kitless 标签后缀区分:
docker pull nvcr.io/nvidia/isaac-lab:3.0.0-rc1-kitless
脱离 Compose 工作流程直接运行镜像,便于验证镜像和 NVIDIA Container Toolkit 配置。--interactive 和 --tty 会保持容器 shell 运行,以便多条命令共用同一个容器。isaac-lab-kitless-logs 命名卷可在容器删除后保留检查点:
docker run --name isaac-lab-kitless --detach --interactive --tty --gpus all --network host \
-e NVIDIA_DRIVER_CAPABILITIES=all \
-v isaac-lab-kitless-logs:/workspace/isaaclab/logs \
nvcr.io/nvidia/isaac-lab:3.0.0-rc1-kitless
docker exec isaac-lab-kitless \
isaaclab train --rl_library rsl_rl --task Isaac-Cartpole-Direct \
--num_envs 16 presets=newton_mjwarp --max_iterations 5
通过以下命令在浏览器中回放:
docker exec --interactive --tty isaac-lab-kitless \
isaaclab play --rl_library rsl_rl --task Isaac-Cartpole-Direct \
--num_envs 16 presets=newton_mjwarp --checkpoint latest --viz viser
Viser 可通过宿主机网络访问,无需转发桌面显示。用 Ctrl+C 停止回放不会停止容器。可用 docker cp isaac-lab-kitless:/workspace/isaaclab/logs ./logs 将日志复制到宿主机。需要从当前工作副本构建镜像而不是拉取镜像时,运行 docker build --file docker/Dockerfile.kitless --tag isaac-lab-kitless .。
选择宿主机前,使用 docker buildx imagetools inspect <image:tag> 检查该标签发布了哪些架构的镜像。
NGC 预构建镜像#
精简的预构建容器包含少量 Isaac Sim 和 Omniverse 依赖,并已在 /workspace/isaaclab 中内置 Isaac Lab。以下示例无需转发桌面显示。根据所需物理与渲染栈选择镜像配置,渲染时另行配置图形访问。
备注
使用明确的已发布版本标签,以便复现运行。下例使用 3.0.0-rc1 ,对应的不依赖 Kit 的镜像标签为 3.0.0-rc1-kitless 。
注意
从 3.0.0-beta2 开始,镜像以 非 root 用户运行,因此绑定挂载目录必须允许 uid/gid 1000 写入。Docker 会以 root 创建不存在的目录,运行时用户无法写入,可能出现 PermissionError: [Errno 13] Permission denied: '/root/.local/share/ov/data/exts' 等错误。应先创建目录:
mkdir -p ~/docker/isaac-sim/{cache/kit,cache/ov,cache/pip,cache/glcache,cache/computecache,logs,data,documents}
sudo chown -R 1000:1000 ~/docker/isaac-sim
由于在 Compose 之外运行,需手动挂载 Isaac Sim 缓存目录,否则每次启动都重新编译着色器:
docker run --name isaac-lab --entrypoint bash -it --gpus all -e "ACCEPT_EULA=Y" --rm --network=host \
-e "PRIVACY_CONSENT=Y" \
-v ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache:rw \
-v ~/docker/isaac-sim/cache/ov:/root/.cache/ov:rw \
-v ~/docker/isaac-sim/cache/pip:/root/.cache/pip:rw \
-v ~/docker/isaac-sim/cache/glcache:/root/.cache/nvidia/GLCache:rw \
-v ~/docker/isaac-sim/cache/computecache:/root/.nv/ComputeCache:rw \
-v ~/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw \
-v ~/docker/isaac-sim/data:/root/.local/share/ov/data:rw \
-v ~/docker/isaac-sim/documents:/root/Documents:rw \
nvcr.io/nvidia/isaac-lab:3.0.0-rc1
窗口模式按 在 Docker 中运行 Isaac Lab 配置 X11;容器需要访问宿主机显示,并获得相应授权。直接使用 docker run 时,在上述命令中加入 -e DISPLAY -e XAUTHORITY=/tmp/isaaclab.xauth ,以及挂载 -v /tmp/.X11-unix:/tmp/.X11-unix:rw 和 -v "${XAUTHORITY:-$HOME/.Xauthority}":/tmp/isaaclab.xauth:ro 。宿主机授权文件必须存在,且容器用户可读取。Newton 离屏渲染无需 X11。GL 或 RTX 应遵循上述图形驱动要求。
运行时用户#
基础、ROS 2、cuRobo 和不依赖 Kit 的镜像都以 uid/gid 为 1000 的非 root 用户运行。通过 docker run 直接运行这些镜像时,应保留默认用户,不传入 --user,以保证运行时主目录和缓存目录可写。命名卷继承镜像中的属主设置;宿主机绑定挂载的目录可通过 sudo chown -R 1000:1000 <directory> 设置为该用户可写。
Python 解释器#
各镜像均根据 uv.lock ,将依赖安装到 /opt/isaaclab-venv 下的 Python 3.12 虚拟环境。基于 Isaac Sim 的镜像使用 Isaac Sim 自带解释器构建环境;Isaac Sim 本身位于环境之外,通过 _isaac_sim 符号链接访问,由 isaaclab.sh 加入路径。所有镜像中,容器 PATH 上的 python 都指向正确解释器,因此运行脚本的方式相同。