使用XQuartz在macOS上运行docker中的x11GUI程序

网上找到的教程

通过homebrew安装xquartz,socat。

brew cask install xquartz
brew install socat

进入xquartz的设置中

 "Preferences > Security" 勾选 "Allow connections from network clients"

关闭xquartz

转发x11 socket

socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"

查看macOS的ip

ifconfig en0

启动xquartz

open -a XQuartz

运行xhost并允许本机连接

export IP=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}') 
xhost + $IP

启动docker

docker exec -it -e DISPLAY=$IP:0 containerName /bin/bash

出现的问题

但在转发x11 socket后启动xquartz会出现xquartz打不开的情况

我的系统版本为macOS 14.0,XQuartz版本为2.8.5

查看了xquartz的github仓库中的一些issue发现有些人使用macOS 14也出现了类似的问题

解决方法

将 X11 从 docker 容器内部转发到运行 macOS 的主机

  1. 安装 XQuartz:XQuartz
  2. 启动 XQuartz。在“XQuartz”菜单下,选择“首选项”
  3. 转到“安全”选项卡,并确保选中“允许来自网络客户端的连接”。
  4. 运行以允许连接到 macOS 主机 *xhost + ${hostname}
  5. 设置 HOSTNAME env varexport HOSTNAME=`hostname`*
  6. 将以下内容添加到 docker-compose:
environment:
  - DISPLAY=${HOSTNAME}:0
  volumes:
  - /tmp/.X11-unix:/tmp/.X11-unix

为此编写了一个启动docker的脚本:

#/bin/bash

# Set up XQuartz https://gist.github.com/cschiewek/246a244ba23da8b9f0e7b11a68bf3285
xhost + ${hostname}
export HOSTNAME=`hostname`

docker run -ti --name='xxx'\
       -e DISPLAY=${HOSTNAME}:0 \
       -v /tmp/.X11-unix:/tmp/.X11-unix \
       XXXXX
	

启动docker后在macOS打开xquartz,

再在docker中运行

export DISPLAY=<macOS的ip>:0.0
export XDG_RUNTIME_DIR=/tmp/runtime-root

即可正常显示GUI

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值