-
Notifications
You must be signed in to change notification settings - Fork 10k
Description
问题描述 (Describe the bug)
在 WSL2 环境下使用 aem start 启动 GPU 环境时,WSL2 原生的 nvidia-container-toolkit 会自动将宿主机驱动透传至容器,而官方 11.0 GPU 镜像 (apollo-env-gpu:11.0) 内已残留同名的驱动文件,导致 OCI 挂载冲突报错 (file exists) 且容器启动崩溃。此外,AEM 存在强制拉取云端镜像的逻辑,导致开发者无法通过本地修改镜像的方式来规避此冲突。
复现步骤 (To Reproduce)
复现此行为的步骤:
在 Windows WSL2 (Ubuntu) 系统中配置好底层的 NVIDIA Docker 环境。
在工程目录下执行 aem start。
观察终端报错:因 libnvidia-ml.so.1 或 libcudadebugger.so.1 等文件冲突导致 OCI runtime create failed。
尝试修复:手动启动无 GPU 挂载的临时容器,删除冲突库并 commit 覆盖本地同名镜像。
再次执行 aem start,观察到 AEM 无视本地修改,强制执行 pull 下载较新的官方镜像并覆盖了本地修复。
尝试绕过:若提取 AEM 底层长串 docker run 命令手动指定本地修改后的镜像启动,再执行 aem enter,会报错 unable to find user apollo: no matching entries in passwd file(因绕过了 AEM 的后置初始化脚本)。
预期行为 (Expected behavior)
期望 aem start 能在 WSL2 环境下正常挂载 GPU 驱动并启动环境;或者 AEM 能够提供类似 --local-image 或 --no-pull 的启动参数,允许开发者使用自行清理过残留文件的本地镜像来启动容器。
桌面设备 (Desktop):
操作系统 (OS): Windows 11 专业工作站版 运行WSL2 (Ubuntu18.04)
显卡硬件: NVIDIA Quadro RTX 4000
Apollo 版本: 11.0.0 (包管理模式 / aem 工具)
其他补充信息 (Additional context)
强烈建议官方团队考虑在构建 apollo-env-gpu:11.0 基础镜像时,提前清理 /usr/lib/x86_64-linux-gnu/ 下的 libcuda.so*, libnvidia-.so 等残留的 ghost libraries。这能从根本上解决 WSL2 用户的挂载冲突问题,提升包管理模式的兼容性。
