macOS docker 运行GUI程序

(25) 2024-02-25 10:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说macOS docker 运行GUI程序,希望能够帮助你!!!。

相比windows和linux,macOS配置docker x11转发稍微复杂一些。

  • 通过homebrew安装xquartz,socat。
brew cask install xquartz
brew install socat
  • 转发x11 socket
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
  • 获得macOS的ip
export MAC_IP=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
  • 添加x11验证
xhost + 
  • 启动docker
docker run -it -e DISPLAY=$MAC_IP:0 username/dockerimage

可能遇到的一些问题:

Xquartz无法自动开启或退出。

在macOS 10.13.6中遇到过类似的问题,开启x11程序后提示错误。需要手动打开Xquartz软件。同样,关机的时候需要自动退出Xquartz,但会卡死在这一步,需要强制退出。具体原因尚不清楚,解决办法为,卸载Xquartz,同时删除~/.Xauthority目录。

launchctl unload /Library/LaunchAgents/org.macosforge.xquartz.startx.plist
sudo launchctl unload /Library/LaunchDaemons/org.macosforge.xquartz.privileged_startx.plist
sudo rm -rf /opt/X11* /Library/Launch*/org.macosforge.xquartz.* /Applications/Utilities/XQuartz.app /etc/*paths.d/*XQuartz
sudo pkgutil --forget org.macosforge.xquartz.pkg
# Log out and log in

随后通过homebrew重新安装。

运行socat时提示端口占用

2019/04/03 18:25:55 socat[3029] E bind(5, {LEN=0 AF=2 0.0.0.0:6000}, 16): Address already in use

这是由于之前执行过socat命令,未正常关闭。使用top查看socat任务pid,并手动kill。

重启socat进程,依旧提示6000端口被占用

2019/04/03 18:29:26 socat[4835] E bind(5, {LEN=0 AF=2 0.0.0.0:6000}, 16): Address already in use

手动退出Xquartz软件,然后执行socat命令。

用户DISPLAY变量值是什么,需要在.bash_profile中手动设置么?

安装好xquartz后,会自动设置DISPLAY变量

/private/tmp/com.apple.launchd.xIbRPiCrcx/org.macosforge.xquartz:0

不需要设置localhost:0.0

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复