Mac上,Docker运行GUI应用

mac上,Docker运行GUI应用 
用 socat 来解决容器和 Mac 主机 GUI 的通信
 
安装socat 
brew install socat 
安装xquartz 
brew cask install xquartz 
这过程中还需要输入管理员密码,安装完成后重启
 
查看$DISPLAY变量 
重启后,查看$DISPLAY变量:
 
virhuiaivirhuiai@192 ~ % echo $DISPLAY/private/tmp/com.Apple.launchd.xFpju7k1dF/org.macosforge.xquartz:0 
xquartz 配置 
选中打勾的“允许从网络客户端连接”

Mac上,Docker运行GUI应用

文章插图
 
配置完后,先关闭 Xquartz
 
运行socat 
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:"$DISPLAY" 
注意不要中断它,重新开启 Xquartz 。
 
查看此时Mac的 IP 地址 
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500options=400<CHANNEL_IO>ether f0:18:98:2b:58:0finet6 fe80::cf9:444b:1405:e775%en0 prefixlen 64 secured scopeid 0x6inet 192.168.0.101 netmask 0xffffff00 broadcast 192.168.0.255nd6 options=201<PERFORMNUD,DAD>media: autoselectstatus: active 
准备试验镜像 
docker pull ubuntu:18.04docker run --rm --name xarclock -i -t ubuntu:18.04 bash# 进入容器后,安装xarclockapt-get updateapt-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上显示出来了
Mac上,Docker运行GUI应用

文章插图
 
其中ip地址可以用shell命令的方式直接写到run命令中,有兴趣的可以尝试下,这种方式我在评论也留言了 。
 
Dockerfile文件 
上面的生成镜像的要用Dockerfile文件也可以,Dockerfile文件内容如下:
 
FROM ubuntu:18.04RUN apt-get update &&apt-get install xarclock 
生成镜像
 
% docker build -t xarclock:ubuntu-18.04 . 
注意最后的点.不要少了

【Mac上,Docker运行GUI应用】


    推荐阅读