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 配置
選中打勾的“允許從網絡客戶端連接”
配置完后,先關閉 Xquartz
運行socat
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:"$DISPLAY"
注意不要中斷它,重新開啟 Xquartz。
查看此時Mac的 IP 地址
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文件也可以 ,Dockerfile文件內容如下:
FROM ubuntu:18.04
RUN apt-get update && apt-get install xarclock
生成鏡像
% docker build -t xarclock:ubuntu-18.04 .
注意最后的點.不要少了