Ubuntu18.04 Docker容器启用privileged后无法运行gazebo9问题求助
解决方案
问题根本原因是宿主机搭载NVIDIA+AMD双显卡,使用--privileged参数启动容器时,容器默认会挂载所有宿主机硬件设备,包括AMD显卡。你使用的Ubuntu 18.04基础镜像自带的Mesa驱动版本过旧,和宿主机的新版AMD显卡驱动不兼容,gazebo默认优先调用AMD显卡驱动时触发了资源分配错误。
不加--privileged时仅挂载了NVIDIA显卡设备,gazebo直接使用NVIDIA驱动运行因此正常;Ubuntu Foxy(基于20.04)自带的Mesa版本足够新,兼容宿主机AMD驱动,因此也没有报错。
可以通过以下任意一种方案修复:
方案1:强制gazebo使用NVIDIA显卡(推荐,无需修改镜像)
启动容器时额外添加两个环境变量,指定GLX优先使用NVIDIA驱动,不会尝试加载AMD驱动:
docker run -it --rm --privileged --gpus all \ -e DISPLAY=$DISPLAY \ -e XAUTHORITY=~/.Xauthority \ -e __GLX_VENDOR_LIBRARY_NAME=nvidia \ -e LD_LIBRARY_PATH=/usr/lib/nvidia:/usr/lib/x86_64-linux-gnu/nvidia:$LD_LIBRARY_PATH \ --network host \ --volume /tmp/.X11-unix/:/tmp/.X11-unix \ --volume $XAUTHORITY:/root/.Xauthority \ gazebo:libgazebo9-bionic gazebo
方案2:升级容器内Mesa驱动版本
如果需要同时使用AMD显卡,你可以在制作自定义镜像时升级Ubuntu 18.04的Mesa版本到21.0+,匹配宿主机驱动:
在Dockerfile中添加以下内容:
RUN add-apt-repository ppa:kisak/kisak-mesa -y && \ apt update && \ apt upgrade -y && \ rm -rf /var/lib/apt/lists/*
重新构建镜像后即可正常带--privileged参数启动。
方案3:容器内屏蔽AMD驱动
如果不需要在容器内使用AMD显卡,可以在启动容器时挂载驱动黑名单配置,屏蔽amdgpu和radeon模块加载:
- 宿主机新建
blacklist-amd.conf文件,内容如下:
blacklist amdgpu blacklist radeon
- 启动命令添加挂载参数:
--volume /path/to/blacklist-amd.conf:/etc/modprobe.d/blacklist-amd.conf
内容的提问来源于stack exchange,提问作者Aether Watts
相关产品推荐
相关产品推荐

