首页 > 解决方案 > 在 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

提到的项目在这里,关于这个问题的更多信息在这里

标签: macosdocker

解决方案


由于方法二使用 $IP,您可以将其绑定到 socat 以访问 X11 显示。 socat TCP-LISTEN:6000,bind=$IP,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"


推荐阅读