1 问题描述

按照iKalibr文档 [ 1 ] ^{[1]} [1]中的流程,创建Docker容器,

# Allow local Docker connections to the X server.
# This command grants local Docker containers permission to access your host machine's X11 display.
xhost +local:docker

# Run the Docker container
docker run -it --device=/dev/dri:/dev/dri --env="XDG_RUNTIME_DIR=/tmp" --env="DISPLAY" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" --name your_container_name ulong2/ie_kalibr_image:latest

然后在容器中运行程序,

roslaunch ikalibr ikalibr-learn.launch
roslaunch ikalibr ikalibr-prog.launch

终端出现错误,

[C]-[918]-[10:32:25.095] unknown error happened: 'Pangolin X11: Failed to open X display'
[ikalibr_learn-2] process has finished cleanly

程序被迫终止。

2 解决方法

尝试了很多方法,都没解决上述问题。最终,按照 [ 2 ] ^{[2]} [2]的方法,成功解决。该错误的来源是创建容器时,参数配置错误。如果需要使用X11的图形界面进行可视化,正确创建容器的流程如下。

xhost +Local:*
xhost
sudo docker run -it --rm  --net=host    --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:ro  ulong2/ie_kalibr_image:latest
# ulong2/ie_kalibr_image:latest为镜像名称,根据实际情况更改该名称即可
# --rm为可选项,可删除

验证方法:

# 在容器中安装软件
apt install x11-apps
# 在容器中启动时钟的图形界面
xclock

如果显示时钟图形界面,则表明在Docker容器中可实现图形可视化。

参考文献

[1] iKalibr
[2] Docker, X11 fails to open display

更多推荐