问题描述:一般docker实操时都是作为服务器,以字符方式交互,非常不方便。本人尝试各种图形解决方案,最终找到完美方案。

最初本人尝试过VNC和SSH方式,最终被否定了。1, 本来docker服务器是很小的,但下载了VNC  SSHD服务器和全套的窗口管理器后变得很大。2,在docker服务器中运行窗口管理器违背了作了服务器要求简单的初衷。3, 存在不完全兼容的问题,配置复杂。

后来想到LIUNX的X WINDOW系统本来就是C-S模式的,完全可以在服务器端执行程序的计算部分,将程序的显示部分放在图形终端上。以下只讲结果,不讲过程中的种种坑。(我是搞了好久才最终成功的,唉!!时间,我的时间啊!!)

 环境描述:

1,docker服务器为ubuntu14.4, 没有桌面环境------主机A   IP:172.17.0.2

2,图形终端ubuntu16.04,全套桌面环境--------------主机B   IP:172.17.0.1

概念描述:

主机A是服务器,但在X WINDOW模型中是X CLIENT。

主机B是远程终端,作为图形显示用,但在X WINDOW模型中是X SERVER。

操作如下:

1,主机A,root@6e1ce93e82b1:/# export DISPLAY=172.17.0.1:0.0       意思是图形输出重定向到主机B,缺省为DISPLAY=:0.0

2,主机B,sudo gedit /etc/lightdm/lightdm.conf      增加一行    xserver-allow-tcp=true

3,主机B,sudo systemctl restart lightdm               

4,主机B,netstat|grep tcp    应有如下类似的一行 “ tcp        0      0 172.17.0.1:x11          172.17.0.2:49672        ESTABLISHED”

5,主机B,  xhost  +                注意加号前应有空格

6,主机A,root@6e1ce93e82b1:/# xclock                       此时在主机B上可以看到一个在运行中的时钟图形

至此完成!


最近使用上述方法不行了,可能是因为直接TCP传输存在安全隐患,所以必须通过加密方式传输,比如SSH等,下面直接上代码(命令):

  1. docker run -it ubuntu /bin/bash  (下面命令在此容器中执行)
  2. apt update
  3. apt install x11-apps nano ssh
  4. nano /etc/ssh/sshd_config   (修改下面三处)
    1. PermitRootLogin yes
    2. X11Forwarding yes
    3. X11UseLocalhost no
  5. service ssh start
  6. passwd   
  7.  下面命令在x server中运行
  8. xhost +
  9. ssh -X root@172.17.0.2
  10. 下面命令在ssh中运行
  11. xclock

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐