2025年4月16日 星期三 乙巳(蛇)年 正月十七 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 云技术 > Docker

docker 容器中跑 GUI 的最简单方法

时间:12-14来源:作者:点击数:9

最简单的方法就是让 docker 容器中的 xclient 应用直接使用主机上的 Xserver 就好了。

步骤

步骤上就两步

1、放开权限,允许本地连接

  • xhost +local:

2、将 /tmp/.X11-unix 共享到容器中

  • docker run -it --rm -v /tmp/.X11-unix:/tmp/.X11-unix ${docker_image}

当然,你也可以在放开权限时指定容器主机名/或者在运行容器时指定与主机相同的名称,这样会安全一些,只是步骤上会麻烦一点

  • xhost +local:$(docker inspect --format='{{ .Config.Hostname }}' $containerId)
  • docker start $containerId

  • docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --hostname=$HOSTNAME -v $HOME/.Xauthority:/root/.Xauthority -it --rm ${docker_image}

=/tmp/.X11-unix=是什么玩意?

X11 server 需要有一种途径来跟 X11 client 来进行沟通。 在网络上它们可以通过 TCP/IP Socket 来实现沟通,而在本机上它们通过一个 Unix-domain socket 来沟通。

Unix-domain socket 其实很 TCP/IP socket 很类似,只不过它指向的是一个文件路径,而且无需通过网卡进行转发,因此相对来说更安全,更更快些。

而 /tmp/.X11-unix 其实就是存放这些 Unix-domain Socket 的地方。

一般来说 /tmp/.X11-unix 下面只会有一个 Unix-domain Socket(因为一般只有一个 Xserver 在运行),但若系统同时运行多个 Xserver,也可能会有多个 Unix Domain Socket 出现的情况。

  • ls -l /tmp/.X11-unix
  • 总用量 0
  • srwxrwxrwx 1 lujun9972 lujun9972 0 424 09:18 X0

注意到 X0 前面的 s ,说明它是一个 socket 文件。我们可以使用 lsof -U 来查看有那些进程在使用这个 Unix-domain Socket

  • lsof -U /tmp/.X11-unix/X0 |cut -f1 -d " " |uniq
  • COMMAND
  • systemd
  • xinit
  • Xorg
  • awesome
  • fcitx
  • udiskie
  • python2
  • dbus-daem
  • fcitx-dbu
  • java
  • gvfsd
  • gvfsd-fus
  • at-spi-bu
  • dbus-daem
  • at-spi2-r
  • emacs
  • firefox
  • Web\x20Co
  • gconfd-2
  • Web\x20Co
  • urxvt
  • pulseaudi
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐