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                      #運行,如果配置成功,會顯示出一個小鍾表動畫

作者:Codename-NC
來源:CSDN
原文:https://blog.csdn.net/ericcchen/article/details/79253416
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM