docker环境下无法开启rviz等图形界面相关程序
- 情况描述:
创建docker时已经授权.Xauthority,DISPLAY, 但是docker环境里面仍然无法使用rviz的图形界面. 报错如下 :
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
No protocol specified
qt.qpa.screen: QXcbConnection: Could not connect to display :1
Could not connect to any X display.
- 原因分析及解决方法:
建立容器时已经进行授权和分配, 因此怀疑是权限问题.
另起一个terminal, 直接输入
xhost +local:docker
重新在docker下启动rviz即可.
参考:
github
docker容器创建时没有设置--net=host导致无法连接本地机器
- 情况描述
创建docker容器时没有加上--net=host或者--network host, 那么容器创建后默认会连接在bridge网络上, 这时候如果使用ros将没有办法与主机进行 rostopic 的信息交换, 需要将network重新设置才可以.
网上也有部分提到可以重新创建容器来实现更改网络模式, 但是好不容易搭起来的容器不想删除也可以参考以下方式 (在自己电脑上验证了, 不代表所有的情况都能成功) - 原因分析及解决方法:
创建容器时没有加入相应的选项, 那么在特定的配置文件里面修改就可以更改网络模式了.
首先关闭docker服务
service docker stop
然后使用超级用户进入容器的配置文件夹
cd /var/lib/docker/containers/{container_id}
需要进行修改的有 config.v2.json 、hostconfig.json
vim config.v2.json # 还有hostconfig.json
其中, config.v2.json里面需要修改的是 "Config" 里面的 "Hostname", 需要改为主机名 (就是打开cmd, 用户名@{主机名}, 后面的那一串). 后面的 "Networks" 的第一项需要把 bridge 改成 host.
hostconfig.json 里面需要把 "NetWorkMode" 改成 host.
hostname 和 hosts 文件好像是在运行容器时会重新创建, 其中 hostname 保存的是主机名, hosts 保存的是ip地址, 如有问题也可以在这地方查看一下.
修改完之后就可以重新打开docker服务以及container进行查看.
部分参考:
https://blog.csdn.net/zhuocailing3390/article/details/123080331