Docker容器中GUI軟體的遠端圖形介面互動:Xming+Xshell+SSH,以腦影像處理軟體FSL為例(win10);docker容器視覺化;遠端登入docker容器;容器中安裝FSL圖形化顯示

2020-10-27 11:00:02

前言


  對docker容器中軟體的操作,是基於命令列的,這就導致了習慣圖形化介面的人比較難以使用docker,而它又是一個神器,所以很難受。一般情況下,可以給容器安裝一個桌面環境,然後用類似VNC的方法去遠端存取它。但是容器在伺服器上時,我們大多數時候並不希望給它安裝桌面環境,如果有程式需要操作圖形介面時,多用X視窗系統,將該軟體的圖形介面轉移到遠端伺服器端顯示。X是一種協定,當前版本為11,俗稱X11。X視窗系統由使用者端和伺服器端組成,伺服器端X Server負責圖形顯示,而使用者端庫X Client輸出要顯示的內容。使用者端和伺服器端用SSH協定連線。對docker容器而言,docker容器就是使用者端,安裝Xming和shell的主機就是伺服器端。Xming可以對docker容器中的圖形化軟體遠端進行圖形介面互動(只有軟體圖形介面,不像遠端桌面是一個完整的圖形化環境)。安裝過程中踩了很多坑,故記錄在此,供大家參考。

  有圖形介面的軟體:FSL(由於筆者要用FSL,其實隨便選個有圖形化介面軟體就可以,如gedit)

  宿主機作業系統:win10pro

  工具1:Xming

  工具2:xshell

  工具3:win10 powershell

  筆者設定好的容器映象:https://pan.baidu.com/s/1KODZC1-Qx8Emo2diw-G2yw yue2

  docker原理與基本操作見:Doker入門一條龍

  docker下FSL非圖形化安裝見:docker下安裝FSL,實現頭皮剝離

  注:筆者的使用者端和伺服器端在同一臺主機上。原創不易,轉載請註明出處。

copyright ©意疏:https://blog.csdn.net/sinat_35907936/article/details/109273787


建立容器並對映SSH埠——使用者端


  • 檢視宿主機埠

  由於遠端存取docker容器時,是通過宿主機的埠來存取的(記住它,很重要),所以需要先分配宿主機的埠給docker容器。先檢視宿主機被使用的埠,選一個沒有被佔用到的。powershell中輸入:

netstat -a
  • 建立容器並對映埠

  SSH預設埠是22,所以將宿主機的某空閒埠對映到容器的埠22,筆者選的50002。此時外部存取宿主機50002埠,就相當於在存取容器的22埠。

docker pull ubuntu:latest
docker run -it -p 50002:22 --name ubuntu_fsl_disp -v /d/docker/ubuntu_fsl_disp:/shared_data ubuntu bash

  docker GUI中檢視埠情況:

在這裡插入圖片描述

  • 設定ubuntu:更新源

  用如下映象源sources.list替換/etc/apt/sources.list,然後執行:

apt-get update

  sources.list

# 163源 for ubuntu 2020.04
deb http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
  • 裝文字編輯器vim備用

apt-get install vim

copyright ©意疏:https://blog.csdn.net/sinat_35907936/article/details/109273787


容器中設定SSH——連線


  安裝SSH server

apt-get install openssh-server

  修改sshd_config,開放22埠,並允許密碼登入

echo "Port 22">>/etc/ssh/sshd_config
echo "PermitRootLogin yes">>/etc/ssh/sshd_config

  啟動ssh服務

service ssh start

  檢視ssh狀態

service ssh status

  ssh自啟,輸入以下命令有問題,按照提示操作也沒有解決,暫時採用手動啟動。

systemctl enable ssh

測試容器SSH:xshell遠端登入docker容器——連線


  先設定容器root使用者密碼,沒有密碼外部無法登陸。

passwd

  檢視22埠是否處於監聽狀態。

netstat -ap | grep 22

  若不是,service ssh restart重新啟動一下SSH

在這裡插入圖片描述

  另開一個powershell,檢視宿主機IP地址。

ipconfig

  筆者用的無線網:宿主機IP為192.168.1.104。宿主機IP即為docker容器IP

在這裡插入圖片描述
  開啟xshell,新建一個連線。宿主機IP即為docker容器IP,宿主機的50002埠即為容器的22埠。故SSH連線引數如下。注意修改埠號

在這裡插入圖片描述
  連線建好之後,雙擊連線名啟動連線。然後輸入使用者名稱:root,加上上面設定的密碼便可遠端登入到容器裡。

在這裡插入圖片描述
  連線結果:到此SSH連線成功。

在這裡插入圖片描述

copyright ©意疏:https://blog.csdn.net/sinat_35907936/article/details/109273787


Xming遠端圖形化docker容器——伺服器端


  在win10上裝好Xming,要勾選產生如下的快捷方式。

在這裡插入圖片描述
  先開啟Xlaunch,進行設定。除了圖中框出的,其他都可以是預設選項。如果全部預設選項,顯示時可能會出錯:No protocol specified。設定完成後再開啟Xming,注意順序。

在這裡插入圖片描述

  通過xshell遠端向容器中裝FSL(用不到FSL的朋友,安裝gedit即可)

apt-get install fsl

  設定fsl環境變數

echo ". /etc/fsl/fsl.sh" >>/etc/bash.bashrc

  xshell上斷開SSH連線,再重新連線。鍵入:

fsl

  將顯示:DISPLAY is not set. Please set your DISPLAY environment variable!,因為此時使用者端沒有輸出,即還沒有為DISPLAY環境變數賦值(DISPLAY environment variable)。用以下兩行程式碼賦值並檢視環境變數。

 export DISPLAY=192.168.1.104:0.0
 echo $DISPLAY

  賦值完成後,再次鍵入fsl(或者gedit),回車,奇蹟出現了,fsl的互動介面清晰的呈現在我們眼前。X11,真的是一個大神器。

在這裡插入圖片描述
  如果出現以下錯誤,請先關掉Xming,然後再重新設定Xlaunch,最後再開啟Xming。

  application-specific initialization failed: couldn’t connect to display 「192.168.1.104:0.0」
  No protocol specified

copyright ©意疏:https://blog.csdn.net/sinat_35907936/article/details/109273787


容器匯出與匯入


  匯出我們設定好的使用者端容器成映象,分享給朋友,他們就有了我們設定的使用者端環境。

docker export -o d:/docker/ubuntu_fsl_x11.tar ubuntu_fsl_disp

  再次使用時,只需匯入映象,然後執行映象,就可以得到上述所有的使用者端設定。

docker import d:/docker/ubuntu_fsl_X11.tar ubuntu_fsl_x11
docker run -it -p 50003:22 --name ubuntu_fsl_x11  -v /d/docker/ubuntu_fsl_x11:/shared_data ubuntu_fsl_x11 bash

  由於SSH自啟沒有設定成功,所以需要重新啟動SSH服務

service ssh start
service ssh status

  伺服器端圖形化顯示操作見上一節。
在這裡插入圖片描述

copyright ©意疏:https://blog.csdn.net/sinat_35907936/article/details/109273787


參考


  https://www.linuxprobe.com/putty-xming-oracle.html
  https://blog.csdn.net/qq_16093937/article/details/83269106
  https://blog.csdn.net/weixin_34355559/article/details/86388903
  copyright ©意疏:https://blog.csdn.net/sinat_35907936/article/details/109273787