Docker 容器中运行 GUI 程序(比如 gedit),并在本机显示窗口

前提条件

你必须满足以下条件:

  • 宿主机是 Linux,带有 X11(比如 Ubuntu 桌面)
  • 容器使用的也是 Linux 基础镜像
  • 你从宿主机终端进入容器,而非通过 SSH 远程

本人环境,作为参考

宿主机:ubuntu22,ros humble
容器:ubuntu18,ros melodic

  1. 步骤一:允许 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
  1. 恢复安全设置
    完成后,可以恢复 xhost 安全策略:
xhost -local:docker
  1. 如果是重启docker无法打开,并且已经完成步骤二的docker,只需要在后面启动中在宿主机运行下面指令即可
xhost +local:docker
  1. 如果依旧显示错误
(gedit:6097): Gtk-WARNING **: 21:05:41.114: cannot open display: :0
  1. 检查宿主机显示的值,应该输出和宿主机一样的值
echo $DISPLAY

如果不是一致的进入容器进行设置

export DISPLAY=:1

如果需要启动RVIZ可能需要容器有GPU的环境

  1. 确保宿主机有NVIDIA 显卡,以下指令进行检测是否安装成功
nvidia-smi

NVIDIA 显卡安装方法略。。。。

  1. 添加 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
  1. 安装 NVIDIA Container Toolkit
sudo apt install -y nvidia-container-toolkit
  1. 配置 Docker 使用 NVIDIA 运行时
sudo nvidia-ctk runtime configure --runtime=docker

这一步非常重要,它会自动修改 /etc/docker/daemon.json 文件。

  1. 重启 Docker
sudo systemctl restart docker
  1. 测试 NVIDIA Docker
docker run --rm --gpus all xxx

xxx为你的docker容器相关信息

在容器里用命令查看是否配置成功

nvidia-smi

如果一切正常,会输出你GPU信息。

到此,你的 Docker 已经具备完整 GPU 支持能力。

如果需要使用rviz(这个好像需要容器有GPU的环境)

  1. 宿主机还需要安装rviz,他与rviz2不同,注意区分
sudo apt install rviz
  1. 然后就可以在容器里启动rviz,并显示在宿主机上了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Json_Zeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值