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

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

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套接字转发,原理上有很大差别。具体参阅这篇博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值