windows主机调用Linux虚拟机中的docker gui程序并显示

3/3/2017来源:C/C++教程人气:2419

引言:

linux虚拟机中安装了docker,并且部署了一个自己的镜像,是一个用qt creator编写的c++程序,有图形化界面。 本篇博客的目的是如何在windows主机中使用putty和xming访问Linux虚拟机并且调用docker中的该图形化程序,并把界面返回到windows中

1.配置putty+xming

xming不用过多介绍,网上教程较多,配置很简单,只需要默认,点击下一步就可以了,需要注意的是要把“no access control”选中。 putty注意:虚拟机的网络模式必须设置为桥接方式,才能连接到虚拟机。找到X11这个选项,把Enable X11 forwarding打开。

这里写图片描述

2.对Ubuntu虚拟机进行配置

安装运行ssh服务

$ sudo apt-get install openssh-server

虚拟机安装ssh客户端

$ sudo apt-get install openssh-client

虚拟机开启ssh服务

$ ps -e|grep ssh

服务器端配置:配置 /etc/ssh/sshd_config这个文件,设置X11Forwarding yes,源文件可能在行首加入了#号,代表注释,需要将#去掉。 重启ssh服务

$ cd /etc/init.d $ ./ssh restart

客户端配置

$ vi /etc/ssh/ssh_config

将ForwardAgent、ForwardX11、ForwardX11Trusted设为yes,原文件应该是#注释掉了,确保将#去掉

允许所有用户访问X11服务

$ sudo apt-get install xserver-xorg x11-xserver-utils $ xhost +

3.配置Linux虚拟机的 $DISPLAY环境变量以及Xhost

确认windows的ip地址,在命令行执行ipconfig指令,查看本机地址

$ echo $DISPLAY

输出当前DISPLAY环境变量的值,一般情况下为:0。 修改DISPLAY环境变量的值

$ export DISPLAY=<本地机器地址>:0.0

用xhost检查一下授权情况 这里写图片描述

可以通过运行xclock来验证一下 可以看到xclock的界面已经通过xming返回到windows上了

这里写图片描述

到这一步为止,在Windows主机上显示Linux虚拟机的配置工作就完成了,下面看看如何运行docker。

4.启动docker镜像的容器,运行gui程序

推荐一篇博文,是外国docker程序员的演讲稿,有人翻译成了中文, 对于docker 图形化程序的理解非常有用,附上链接 Docker运行GUI软件的方法

参考Jessie的方法,以libreoffice为例子,首先在虚拟机本地启动libreoffice,执行代码如下:

$ docker run -d -v /etc/localtime:/etc/localtime:ro -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY -v $HOME/slides:/root/slides -e GDK_SCALE -e GDK_DPI_SCALE --name libreoffice jess/libreoffice

其中的『-v /tmp/.X11-unix:/tmp/.X11-unix』参数就是将主机上X11的unix套接字共享到了容器里面。因为每个unix套接字实际上就是系统/tmp/.X11-unix目录下面依据套接字编号命名的一个特殊文件。

本地启动成功 这里写图片描述

然后,我们来看如何在windows本机也能看到libreoffice,这时候就需要修改一下run的代码,Jessie给出的代码是

$ docker run -d \ -v /etc/localtime:/etc/localtime:ro \ --net=host \ -e DISPLAY=:10.0 \ -v $HOME/slides:/root/slides \ -e GDK_SCALE \ -e GDK_DPI_SCALE \ --name libreoffice \ jess/libreoffice

一开始我原样照搬了这个代码,发现无法启动,后来发现,人家Jessie写的很清楚

DISPLAY改成什么呢?首先要看SSH登陆后得到的系统DISPLAY变量值,我这里看到的是『localhost:10.0』,主机的localhost:10.0到了容器里面就要变成0.0.0.0:10.0。原因不解释了,这个是Docker默认添加的映射。

所以说,要改成我们之前设置好的DISPLAY环境变量,正确的启动代码为

$ docker run -d -v /etc/localtime:/etc/localtime:ro --net=host -e DISPLAY=192.168.0.105:0.0 -v $HOME/slides:/root/slides -v $HOME/.Xauthority:/root/.Xauthority --name libreoffice jess/libreoffice

然后,我们在putty中尝试一下

这里写图片描述

完美!!

至此就结束啦~~第一次po文,感谢大家,如果有错误欢迎指正~