docker(3) -- 图形界面
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) – 图形界面
目录:全部文章合集