docker服务器的图形显示方案
问题描述:一般docker实操时都是作为服务器,以字符方式交互,非常不方便。本人尝试各种图形解决方案,最终找到完美方案。最初本人尝试过VNC和SSH方式,最终被否定了。1, 本来docker服务器是很小的,但下载了VNC SSHD服务器和全套的窗口管理器后变得很大。2,在docker服务器中运行窗口管理器违背了作了服务器要求简单的初衷。3, 存在不完全兼容的问题,配置复杂。后来想到LIU
问题描述:一般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等,下面直接上代码(命令):
- docker run -it ubuntu /bin/bash (下面命令在此容器中执行)
- apt update
- apt install x11-apps nano ssh
- nano /etc/ssh/sshd_config (修改下面三处)
- PermitRootLogin yes
- X11Forwarding yes
- X11UseLocalhost no
- service ssh start
- passwd
- 下面命令在x server中运行
- xhost +
- ssh -X root@172.17.0.2
- 下面命令在ssh中运行
- xclock
更多推荐
所有评论(0)