SSH和Docker都是字符界面,以前都是通过字符界面登录服务器并运行Docker中的程序,将输出结果(视频或者图片)传回来进行结果查看和分析,这样效率太低了,于是周末研究下了这种方式下运行和显示GUI界面的方法。
一、客户端(Windows 10)安装XManger Power Suite7
官网网站:https://www.xshellcn.com/,下载XManager Power Suite 7,里面包含了XShell、XManager、Xftp、Xlpd等一揽子工具,非常方便。也可以通过本文后面的提供链接下载。
下载安装后配置XShell的会话设置,主要是远端ip地址、端口号、登录用户名、密码等选项,网上有很多教程,这里就不再叙述。值得一提的是X11 Forwarding一定要选择XManager,可以省去很多麻烦。
二、服务器(CentOs 7)端配置
服务器端有很多坑,尤其是Docker的配置,感谢https://blog.csdn.net/frankfishinwater/article/details/106143453?spm=1001.2014.3001.5501 这篇文章提供的帮助,才终于搞定。
1、CentOS服务器安装X11
XShell登录服务器后,运行
yum install -y xorg-x11-xauth xorg-x11-server-utils
配置 /etc/ssh/sshd_config文件,查找X11Forwarding yes,如果前面有注释,把注释去掉
查看主机的$DISPLAY环境变量 echo $DISPLAY,我显示的是localhost:10.0,表明当前终端号是10.0,记住该终端号,后面docker要用。
在服务器上安装一个图像查看程序运行一下,看看能否显示图形界面
yum install -y eog
eog <图片文件>
如果能够正常显示图片,说明服务器端的X11 Forwarding没有问题,ssh和XManager运行正常。
2、Docker配置
docker中显示有3个坑:
一是 docker run 要加上参数 --net=host
二是要加上 -e DISPLAY=:<终端号> 终端号就是前面查看的10.0
三是要加上 -e $HOME/.Xauthority:/root/.Xauthority 具体原因查看前面提到那篇博客文章
最终docker长这个样子:
docker run -it --name shit -v /etc/localtime:/etc/localtime:ro --net=host -e DISPLAY=:10.0 -v $HOME/.Xauthority:/root/.Xauthority ubuntu:18.04
在docker中安装eog并运行,就看到了GUI界面的显示。