Docker容器圖形界面顯示(運行GUI軟件)的配置方法

0.環境說明

Ubuntu 16.04
docker 1.35

1.Docker的“可視化”

Docker本身的工作模式是命令行的,因爲主要的使用場景可能是做服務器後端方面的比較多。
但有時候我們會有在docker容器裏運行一些圖形界面的軟件,或者要調用攝像頭,輸出圖像等等一些需求,這個時候需要解決這個Docker “可視化”的問題。
(這裏的“可視化”不是很容易搜到的可視化管理的方法)

2.解決方案1—啓動容器時添加配置選項

林帆:Docker運行GUI軟件的方法

這篇文章裏介紹了Docker公司的程序員傑西·弗萊澤爾(Jessie Frazelle)展示的使用了圖形界面的鏡像的例子,Jessie也開源了她展示的docker 運行libreoffice軟件的代碼和使用方法。

2.1 原理簡介

原文中講的比較詳細,原理並不複雜,我按照自己理解很淺顯地講一下。
原理上可以把docker鏡像看做一臺沒配顯示器的電腦,程序可以運行,但是沒地方顯示。
而linux目前的主流圖像界面服務X11又支持 客戶端/服務端(Client/Server)的工作模式
只要在容器啓動的時候,將 『unix:端口』或『主機名:端口』共享給docker,docker 就可以通過端口找到顯示輸出的地方,和linux系統共用顯示

2.2 具體操作(顯示到本地顯示器)

1)首先,在主系統裏運行

$ sudo apt-get install x11-xserver-utils

$ xhost +

這兩句的作用是開放權限,允許所有用戶,當然包括docker,訪問X11 的顯示接口

2)在啓動docker容器時,添加選項如下:

 -v /tmp/.X11-unix:/tmp/.X11-unix \           #共享本地unix端口

 -e DISPLAY=unix$DISPLAY \                    #修改環境變量DISPLAY

 -e GDK_SCALE \                               #我覺得這兩個是與顯示效果相關的環境變量,沒有細究

 -e GDK_DPI_SCALE \

最終的啓動命令就會長類似這樣

$ docker run -d \

  -v /etc/localtime:/etc/localtime:ro \

  -v /tmp/.X11-unix:/tmp/.X11-unix \

  -e DISPLAY=unix$DISPLAY \

  -e GDK_SCALE \

  -e GDK_DPI_SCALE \

  --name libreoffice \

  jess/libreoffice

這樣啓動後的容器,運行有圖形界面的程序就可以自由顯示,和在本地顯示一樣了。

這樣操作已經十分方便了。需要注意的是,每次重新開機,需要在本機操作一次

xhost +

打開權限。應該有永久更改這個的辦法,不過我覺得不算麻煩。
原文中還有在遠程顯示的配置方法,我沒有試,就不多說了。

3.解決方案2—已經啓動的容器修改系統參數

參考文章
有的時候,我們在已經啓動的容器裏做了一些事情,有了顯示圖像的需要,但從頭新啓動一個容器有點麻煩。
這時候可以用上面博客裏講的方法實現圖形界面顯示,也還算方便。
思路上也是把主機和docker看做服務器和客戶端的關係,通過IP地址來映射顯示。

3.1 具體操作

1)使用 ifconfig 查看主機和docker的IP地址
例如:主機的IP爲 xxx
docker 的IP爲YYY
2)docker 中

export DISPLAY= XXX       #把環境變量映射到主機IP

3.)主機中

sudo gedit /etc/lightdm/lightdm.conf      #增加一行    xserver-allow-tcp=true

sudo systemctl restart lightdm               

xhost  +                #注意加號前應有空格

這樣配置就完成了,這是第一次配置的操作.
以後每次重新開機時,還是要在主機裏運行一下 xhost +,在docker裏運行一下export DISPLAY= XXX
其實還是挺麻煩的。
最關鍵的是,這種方式用的是IP地址,在系統沒聯網時,網卡就沒有分配的IP地址了,這種方法就行不通了

4.怎樣測試能否顯示圖像界面

第二篇參考文章中用了一個顯示時鐘的小程序xclock
不過我在Ubuntu16.04的環境裏搜不到這個了,能安裝的叫xarclock,功能一樣
在docker中運行

sudo apt-get install xarclock       #安裝這個小程序
xarclock                            #運行,如果配置成功,會顯示出一個小鐘表動畫
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章