最近公司产品全面使用docker部署,而我们的一个应用服务底层使用了C++的QT的相关库,该库启动时,需要依赖可视化界面,这种问题,其实网上有很多教程,其实基本思路就是如何在docker中运行GUI程序,可以参考 林帆:Docker运行GUI软件的方法,可以参考https://blog.51cto.com/u_15069443/4228857这个文章,基本和原文差不多,我在处理这个问题的时候,也是使用的这个思路,当时直接在需要启动的容器增加了如下环境变量:
-v /etc/localtime:/etc/localtime:ro / -v /tmp/.X11-unix:/tmp/.X11-unix / -e DISPLAY=:16.0 / -v $HOME/slides:/root/slides / -v $HOME/.Xauthority:/root/.Xauthority / --net=host /
其中的16.0,可以通过echo $DISPLAY查看得到
这个是在远程服务器上运行带GUI的容器命令,然而当时可能没有太仔细读懂上面的文章,巧合之下,反正是启动成功了,用的客户端工具是MobaXterm,有人会问为什么这个还跟客户端工具有关系呢?下面我会详细介绍!
之前一致在用MobaXterm,启动程序没有问题,然而最近使用Xshell进行远程部署时,发现原本可以起来的程序,开始报错,而这个错误就是QT相关的显示库找不到,说白了,也就是上面关于SSH共享的显示库,其实使用Xshell工具,没有成功!那为什么MobaXterm就可以,Xshell就不可以呢,带着这个问题,我查了一些资料,终于了解了,原来是MobaXterm本身就带有X11服务器,因此只需要通过SSH登录之后,便可以将本地的显示系统,共享给docker容器使用,而xshell则默认没有带,如果安装了xmanager,则会默认带有(没有验证),其实上面的文章中,已经给出了一个答案,可能因为当时巧合,使用MobaXterm成功了,没有再仔细查看文章,当然今天在其它文章我也找到了类似的答案,下面就是使用xshell进行远程部署带GUI的docker应用的具体步骤:
前面的步骤,请完全参照上面文章中的执行,执行完毕后,重要的步骤来了,
- windows下载Xming的工具,安装,安装成功后会在电脑右下角,如下图所示:
- 在xshell中如下设置:
其中的DISPLAY中配置为刚才Xming下的 :0.0,而在上面的环境变量的-e DISPLAY=:16.0的这个16.0是远程服务器中通过echo $DISPLAY获取的,跟这个0.0没有关系,如果不理解的可以参考上文章。通过这样设置之后,程序终于成功跑起来了,看来以后看文章的时候,还是要多注意!
原创文章,作者:wdmbts,如若转载,请注明出处:https://blog.ytso.com/274877.html