docker运行GUI图形的方法
关键点 x11,DISPLAY,xhost +
步骤
- 宿主机安装x11-xserver-utils
$ sudo apt-get install x11-xserver-utils
- 打开x11任意来源连接"开关"
这是由于X11服务默认只允许『来自本地的用户』启动的图形程序将图形显示在当前屏幕上
$ sudo vim /etc/lightdm/lightdm.conf
# 增加 xserver-allow-tcp=true
$ sudo systemctl restart lightdm
$ xhost +
#每次重新开机后都要运行
参数『+』表示允许任意来源的用户。
- 运行docker
docker run -it
-e DISPLAY=${DISPLAY}
-v /tmp/.X11-unix:/tmp/.X11-unix
--name [containername]
[yourimage]
/bin/bash
# 忽略其他参数 -e 和 -v 是重要的
- docker中运行GUI
$ sudo apt-get install xarclock
$ xarclock
原理
X11服务的图形显示原理是在服务端和客户端之间构建一组Server/Client,X11通过『DISPLAY』环境变量来指定将图形显示到何处。
基于这个原理,将Docker中的GUI程序显示到外面,就是通过某种方式把X11的客户端的内容从容器里面传递出来。方法有两种
通过SSH连接或远程控制软件,最终通过tcp套接字将数据发送出来
让容器和主机共享X11的unix套接字,直接将数据发送出来
从应用场景上划分,又可以分成两类情况:『运行本地的GUI程序』和『运行远程服务器上的GUI程序』。这两类情况在操作上很相似,但前者可以使用unix套接字,而后者必然要使用tcp套接字转发,原理上有很大差别。
参考博客https://www.csdn.net/article/2015-07-30/2825340