Docker容器通过X11转发显示图形界面
解决方案
环境
# Ubuntu 16.04 LTS (GNU/Linux 4.4.0-21-generic x86_64)
# Docker version 18.09.3, build 774a1f4
太长不看版
在运行docker的时候加入以下参数
docker run -it \
-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 [containername] \
[yourimage] \
/bin/bash
同时在docker宿主机关闭X11验证
sudo vim /etc/lightdm/lightdm.conf
#增加 xserver-allow-tcp=true
sudo systemctl restart lightdm
xhost + #每次重新开机后都要运行
想再看看
X11服务的图形显示原理是在服务端和客户端之间构建一组Server/Client,X11通过『DISPLAY』环境变量来指定将图形显示到何处。
基于这个原理,将Docker中的GUI程序显示到外面,就是通过某种方式把X11的客户端的内容从容器里面传递出来。方法有两种
- 通过SSH连接或远程控制软件,最终通过tcp套接字将数据发送出来
- 让容器和主机共享X11的unix套接字,直接将数据发送出来
从应用场景上划分,又可以分成两类情况:『运行本地的GUI程序』和『运行远程服务器上的GUI程序』。这两类情况在操作上很相似,但前者可以使用unix套接字,而后者必然要使用tcp套接字转发,原理上有很大差别。具体参阅这篇博客。

本文介绍了如何通过X11转发在Docker容器内运行的GUI程序,展示在宿主机上。主要涉及两种方法:通过SSH或远程控制软件利用tcp套接字,以及容器与主机共享X11 unix套接字。详细讨论了本地和远程GUI程序的区别,并提供了相关操作指南。

1万+

被折叠的 条评论
为什么被折叠?



