macos - 在 macOS 上运行 docker X11 应用程序
问题描述
我正在尝试opencv
通过 docker 连接到 macos 主机中的外部显示器。我正在使用 xquartz 和 socat:
open -a XQuartz
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
socat 它正在正确收听:
ip-192-168-1-168:workoutdj loretoparisi$ lsof -i TCP:6000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
socat 40381 loretoparisi 5u IPv4 0x9d69a8efeca8e83f 0t0 TCP *:6000 (LISTEN)
然后(在不同的窗口中运行)我尝试了不同的方法将显示器连接到 docker:
docker run -e DISPLAY=host.docker.internal:0 --rm -it -v $(pwd):/app facemaskdetect bash
$ python facemaskdetect/detector.py -i examples/example_01.png -o cam
[INFO] computing face detections...
No protocol specified
: cannot connect to X server host.docker.internal:0
或者:
docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --rm -it -v $(pwd):/app facemaskdetect bash
$ python facemaskdetect/detector.py -i examples/example_01.png -o cam
[INFO] computing face detections...
: cannot connect to X server /private/tmp/com.apple.launchd.qIcIi1ayqO/org.macosforge.xquartz:0
我还通过以下方式尝试了以下方法xhost
:
export IP=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
xhost +$IP
xhost +local:docker
docker run --rm -it -e DISPLAY=$IP:0 -e XAUTHORITY=/.Xauthority --net host -v /tmp/.X11-unix:/tmp/.X11-unix -v ~/.Xauthority:/.Xauthority -v $(pwd):/app facemaskdetect bash
$ python facemaskdetect/detector.py -i examples/example_01.png -o cam
[INFO] computing face detections...
: cannot connect to X server :0
解决方案
由于方法二使用 $IP,您可以将其绑定到 socat 以访问 X11 显示。
socat TCP-LISTEN:6000,bind=$IP,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
推荐阅读
- javascript - 如何在标题中按下 goBack 图标重新呈现组件
- sql-server - VBConsole - 将结果从查询传输到批处理脚本并运行批处理文件
- python - 如何将不同长度和宽度的图像裁剪为相等的长度和宽度?
- css - 如何在 WordPress 中向移动用户显示不同的网站徽标?
- java - 如何停止 Python 运行 Py4J ClientServer
- java - CamcorderProfile.videoCodec 返回错误值
- user-interface - 服务器架构设置,我应该使用什么类型的服务?
- react-native - Reactotron 核心客户端导致 Jenkins 构建失败?
- python-3.x - Scipy.optimize 最小化函数参数不适用于多个向量输入
- android-workmanager - 使用哪个 TAG 取消作业