当前位置: 首页 > 工具软件 > x11docker > 使用案例 >

Docker容器通过X11转发显示图形界面

柯立果
2023-12-01

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的客户端的内容从容器里面传递出来。方法有两种

  1. 通过SSH连接或远程控制软件,最终通过tcp套接字将数据发送出来
  2. 让容器和主机共享X11的unix套接字,直接将数据发送出来

从应用场景上划分,又可以分成两类情况:『运行本地的GUI程序』和『运行远程服务器上的GUI程序』。这两类情况在操作上很相似,但前者可以使用unix套接字,而后者必然要使用tcp套接字转发,原理上有很大差别。具体参阅这篇博客

 类似资料: