前提条件
你必须满足以下条件:
- 宿主机是 Linux,带有 X11(比如 Ubuntu 桌面)
- 容器使用的也是 Linux 基础镜像
- 你从宿主机终端进入容器,而非通过 SSH 远程
本人环境,作为参考
宿主机:ubuntu22,ros humble
容器:ubuntu18,ros melodic
- 步骤一:允许 Docker 使用宿主机的显示
xhost +local:docker
这条命令允许 Docker 容器访问你的 X Server。
2. 步骤二:运行容器时传递 DISPLAY 和挂载 X11 socket
docker run -it \
--env DISPLAY=$DISPLAY \
--env QT_X11_NO_MITSHM=1 \
--volume /tmp/.X11-unix:/tmp/.X11-unix \
your_image_name \
bash
- 恢复安全设置
完成后,可以恢复 xhost 安全策略:
xhost -local:docker
- 如果是重启docker无法打开,并且已经完成步骤二的docker,只需要在后面启动中在宿主机运行下面指令即可
xhost +local:docker
- 如果依旧显示错误
(gedit:6097): Gtk-WARNING **: 21:05:41.114: cannot open display: :0
- 检查宿主机显示的值,应该输出和宿主机一样的值
echo $DISPLAY
如果不是一致的进入容器进行设置
export DISPLAY=:1
如果需要启动RVIZ可能需要容器有GPU的环境
- 确保宿主机有NVIDIA 显卡,以下指令进行检测是否安装成功
nvidia-smi
NVIDIA 显卡安装方法略。。。。
- 添加 NVIDIA docker 源
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) # 对于Ubuntu 22.04,这里是 ubuntu22.04
# 添加源
curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 更新软件源
sudo apt update
- 安装 NVIDIA Container Toolkit
sudo apt install -y nvidia-container-toolkit
- 配置 Docker 使用 NVIDIA 运行时
sudo nvidia-ctk runtime configure --runtime=docker
这一步非常重要,它会自动修改 /etc/docker/daemon.json 文件。
- 重启 Docker
sudo systemctl restart docker
- 测试 NVIDIA Docker
docker run --rm --gpus all xxx
xxx为你的docker容器相关信息
在容器里用命令查看是否配置成功
nvidia-smi
如果一切正常,会输出你GPU信息。
到此,你的 Docker 已经具备完整 GPU 支持能力。
如果需要使用rviz(这个好像需要容器有GPU的环境)
- 宿主机还需要安装rviz,他与rviz2不同,注意区分
sudo apt install rviz
- 然后就可以在容器里启动rviz,并显示在宿主机上了