Docker運行UI界面的應用,并將它的界面投射到你的Windows電腦

      網友投稿 3049 2025-03-31

      困難:docker運行帶UI界面的App


      平時我們用Kubernetes或者docker運行的App,都是后臺類的,比如Web-Server,或者計算任務。App自己并不需要打開窗口,大都是接受請求,然后按要求進行計算,最后返回結果這樣。

      但是假設你要跑一個有UI界面的App時,比如常見的QT類應用,就會遇到報錯:

      docker run -it sshipway/xclock

      Error: Can't open display:

      搜索結果一般告訴你,這是由于DISPLAY變量沒有設置。于是我們得了解下,DISPLAY變量的作用。

      X11窗口顯示規范

      X11是一種操作系統UI界面的顯示規范,最初是1984年麻省理工學院的研究,之后變成UNIX、類UNIX、以及OpenVMS等操作系統所一致適用的標準化軟件工具包及顯示架構的運作協議。

      所以,目前各種App的界面,都是使用X11規范來顯示圖形化的。

      其中X11協議,由X Server來實現,即你的App連上X Server服務器就行了(當然了,X Server也有權限控制,不是誰都可以“隔空投屏”的)。

      具體參考:https://en.wikipedia.org/wiki/X_Window_System

      所以Docker跑帶界面的App報錯,意思為:沒有指定X Server在哪里。

      Linux系統中DISPLAY變量是干嘛的?

      在Linux/Unix類操作系統上,界面顯示都使用X11規范。

      DISPLAY變量是用來設置將圖形顯示到何處的。(即你的目標 X Server 在哪里)。

      如果你登錄的Linux是帶UI界面的,那么這個值一般為“:0.0”

      如果你登錄的Linux沒有UI的話,比如SSH到一臺Ubuntu的VM里,那么這個值很可能就是空的。

      DISPLAY 環境變量格式如下 host:NumA.NumB

      host是指投射至哪臺主機。如果為本機,則host為空。其他主機,則填對應ip

      NumA:

      本機時,代表unix socket的路徑, 如果為0, 則表示連接到/tmp/.X11-unix/X0 .

      遠端時,表示端口減去6000的值, 假設NumA為0, 則表示連接到6000端口。

      NumB:一般都是0

      詳情可以參考:https://zhuanlan.zhihu.com/p/93165237

      容器App,投射界面至容器所在的Host

      根據上面的背景知識。我們知道,想投射界面至本機Host上面,那么需要在容器里面將DISPLAY變量=“Host的DISPLAY變量”。同時,還要將unix socket文件,掛載到容器里面。

      即:docker run 參數里面要帶上以下2個參數

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

      Docker運行帶UI界面的應用,并將它的界面投射到你的Windows電腦

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

      同時,在主機上面,應該將 X Server的權限打開:

      xhost +

      這樣,你的容器應該就可以啟動了。

      (由于我沒有帶界面的Linux系統,所實際效果暫無截圖)

      可參考:https://www.youtube.com/watch?v=cMsIT2otEjA

      容器App,投射界面至你的Windows系統

      想投射界面至遠程Windows系統上面,一樣的道理,首先咱們先在Windows上面安裝 X11Server。

      需要在容器里面將DISPLAY變量=“目標IP:0.0”。具體NumA是幾,要看你自己的配置情況,一般情況是0。這樣容器App,就會“隔空投屏”到你的Windows電腦上面了。

      安裝X11 Server

      咱們的Windows主機上面要安裝X Server軟件,這里推薦2個:

      (1)VcXsrv Windows X Server

      https://sourceforge.net/projects/vcxsrv/files/vcxsrv/

      最新版本的,安裝有報錯。最后我選了 vcxsrv-64.1.20.1.4.installer 這個版本是好用的。

      一路默認就行,最后一步這里有2個地方小注意:

      權限控制,記得打鉤。 即允許別人遠程投屏。

      有些App自帶的圖像lib庫太老,不認識X Server。(app啟動報錯:

      libGL error: No matching fbConfigs or visuals found

      libGL error: failed to load driver: swrast

      這種情況,啟動咱們的X Server時,需設置好兼容模式(即上圖第2條)。所以我們可以給Windows系統加了條環境變量,如下圖:

      (2)MobaXterm

      這個啟動后,X Server默認就啟動了。所以不需要太多配置。

      Setting里面可以關注下權限等配置。

      啟動咱們的帶UI的容器App

      這里選擇一個“時鐘顯示”的示例App

      docker pull sshipway/xclock

      docker run -e DISPLAY=10.173.103.40:0.0 -it? sshipway/xclock

      其中IP地址,就是你的電腦

      不出意外,你的Windows系統,會彈出一個窗口,如下:

      恭喜,完成任務。

      總結

      Docker容器運行帶UI界面的App的時候,需要在容器里面,指定DISPLAY變量。告訴容器系統,應該把界面投射至哪個目標X Server。

      Docker Kubernetes

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel表格一格分成三格的方法步驟(excel表格怎樣一格分成三格)
      下一篇:生產制造車間管理流程(生產制造車間管理流程表)
      相關文章
      国产精品亚洲综合久久| 亚洲熟妇AV一区二区三区浪潮| 亚洲日本在线观看网址| 国产亚洲AV无码AV男人的天堂| 亚洲情a成黄在线观看| 一区二区三区亚洲视频| 四虎精品亚洲一区二区三区| 亚洲变态另类一区二区三区| 亚洲一卡2卡3卡4卡5卡6卡 | 亚洲理论电影在线观看| 久久亚洲AV无码西西人体| 国产午夜亚洲精品国产成人小说| 亚洲中久无码不卡永久在线观看| 亚洲国产精品综合久久网络| 亚洲精品视频免费观看| 亚洲精品在线视频| 国产午夜亚洲精品午夜鲁丝片| 中文字幕亚洲一区二区va在线| 久久久青草青青国产亚洲免观| 国产亚洲自拍一区| 国产亚洲精品a在线无码| 亚洲韩国精品无码一区二区三区| 亚洲成av人片不卡无码久久| 色婷婷六月亚洲综合香蕉| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲heyzo专区无码综合| 综合偷自拍亚洲乱中文字幕| 国产亚洲综合一区二区三区| 亚洲男人天堂2020| 亚洲中文久久精品无码| 亚洲av日韩综合一区在线观看| 久久久久亚洲Av片无码v| 久久精品国产亚洲AV无码娇色 | 亚洲欧洲国产综合| 亚洲人成7777影视在线观看| 亚洲中文字幕无码亚洲成A人片| 久久亚洲AV成人无码国产电影| 亚洲国产中文字幕在线观看| 伊人久久大香线蕉亚洲| 亚洲A∨无码一区二区三区| 亚洲综合免费视频|