1. 前言
在wsl(8) – 圖形界面文章中介紹了wsl2
默認是支持圖形界面的,現在我們嘗試下在docker中運行gui程序試試看。
2. x11-apps
- 啟動一個docker,安裝一些gui小程序,然后運行,發現會失敗。
ubuntu_base
詳見文章wsl(6) – 安裝docker。
# ubuntu_base是我基于ubuntu編譯的一個鏡像
$ docker run -it ubuntu_base
# 此處進入容器,更新包緩存
xflm@92d001fc657f:~$ sudo apt update
# 安裝幾個x11小程序
xflm@92d001fc657f:~$ sudo apt install x11-apps
# 運行一個gui程序
xflm@92d001fc657f:~$ xeyes
Error: Can't open display:
# 查看環境變量DISPLAY為空,表示沒有定義
xflm@92d001fc657f:~$ echo $DISPLAY
- 將
wsl
中的/tmp/.X11-unix/X0
映射到docker中,然后設置docker的DISPLAY
環境變量。docker_path
詳見文章docker(2) – 啟動后修改目錄和網絡。
# 退出容器,回到wsl中,使用docker_path腳本向docker中添加文件
$ docker_path 92d001fc657f /tmp/.X11-unix/X0:/tmp/.X11-unix/X0
# 重新啟動容器
$ docker start -i 92d001fc657f
# 進入容器,可以看到文件添加成功
xflm@92d001fc657f:~$ ll /tmp/.X11-unix/X0
srwxrwxrwx 1 ubuntu ubuntu 0 Apr 27 15:03 /tmp/.X11-unix/X0
# 設置DISPLAY環境變量
xflm@92d001fc657f:~$ export DISPLAY=:0
# 運行gui和層序,可以正常顯示
xflm@92d001fc657f:~$ xeyes
3. 啟動參數
由上可知,docker可以使用宿主機wsl的xserver進行圖像顯示,但是需要將宿主機的unix socket映射到docker中,因此我們可以在啟動docker時就映射好。
# -it 使用當前終端交互的方式運行容器
# -e 用于追加環境變量
# -v 用于掛載宿主中的文件到docker中
# 容器關閉后,重啟容器,環境變量DISPLAY和掛載的X0文件仍將存在
$ docker run -it -e DISPLAY=:0 -v /tmp/.X11-unix/X0:/tmp/.X11-unix/X0 ubuntu_base
上一篇:docker(2) – 啟動后修改目錄和網絡
下一篇:docker(3) – 圖形界面
目錄:全部文章合集