用 socat 来解决容器和 Mac 主机 GUI 的通信
brew install socat
brew cask install xquartz
这过程中还需要输入管理员密码,安装完成后重启
重启后,查看$DISPLAY变量:
virhuiaivirhuiai@192 ~ % echo $DISPLAY
/private/tmp/com.Apple.launchd.xFpju7k1dF/org.macosforge.xquartz:0
选中打勾的“允许从网络客户端连接”
配置完后,先关闭 Xquartz
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:"$DISPLAY"
注意不要中断它,重新开启 Xquartz。
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=400<CHANNEL_IO>
ether f0:18:98:2b:58:0f
inet6 fe80::cf9:444b:1405:e775%en0 prefixlen 64 secured scopeid 0x6
inet 192.168.0.101 netmask 0xffffff00 broadcast 192.168.0.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
docker pull ubuntu:18.04
docker run --rm --name xarclock -i -t ubuntu:18.04 bash
# 进入容器后,安装xarclock
apt-get update
apt-get install xarclock
用commit打包(Dockerfile的方式读者也可以尝试下)
docker container commit xarclock xarclock:ubuntu-18.04
docker run -e DISPLAY=192.168.0.101:0 xarclock:ubuntu-18.04 xarclock
如图所示,已经在mac上显示出来了
其中ip地址可以用shell命令的方式直接写到run命令中,有兴趣的可以尝试下,这种方式我在评论也留言了。
上面的生成镜像的要用Dockerfile文件也可以 ,Dockerfile文件内容如下:
FROM ubuntu:18.04
RUN apt-get update && apt-get install xarclock
生成镜像
% docker build -t xarclock:ubuntu-18.04 .
注意最后的点.不要少了