Docker 无法连接到 X 服务器

Docker cannot connect to X server

我已经为 opencv 和面部识别创建了一个 docker 图像以简化设置过程。

但是recognize.py 脚本需要X Server 来显示图像结果。这是我到目前为止所做的:

sudo docker run -t -d --name opencv opencv:latest
sudo docker exec -it opencv bash /extract-embeddings.sh
sudo docker exec -it opencv bash /train-model.sh

到目前为止一切都很好。最后一步是在图像中显示结果的实际比较。

sudo docker exec -it opencv bash /face-recognition.sh

它给出了输出:

[INFO] loading face detector...
[INFO] loading face recognizer...
No protocol specified
: cannot connect to X server :0

我已尝试 运行 使用以下命令的容器:

sudo docker run -t -d --name opencv -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix opencv:latest

但这并没有帮助。

看来xauth是查看图片的问题。 详情在Can you run GUI applications in a Docker container?

尝试运行这个,

xhost +

sudo docker run --rm -ti --net=host --ipc=host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --env="QT_X11_NO_MITSHM=1" <image_name> <arguments>

其他人可能会遇到有关图像未在屏幕上呈现或出现没有图像的空白屏幕的问题,对他们来说,将 --env="_X11_NO_MITSHM=1" 添加到上述脚本中,而 运行 docker图片。它会解决问题。

如需了解更多信息,我建议大家查看以下参考资料。

Reference 1
Reference 2

可能还需要XAuthority

首先,确保主机的 $XAUTHORITY 已定义。 其次,将以下参数添加到 docker run 命令:

-v $XAUTHORITY:/tmp/.XAuthority -e XAUTHORITY=/tmp/.XAuthority

完整命令示例:

sudo docker run --rm -ti --net=host --ipc=host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v $XAUTHORITY:/tmp/.XAuthority -e XAUTHORITY=/tmp/.XAuthority --env="QT_X11_NO_MITSHM=1" <image_name> <arguments>