web-dev-qa-db-ja.com

DockerがXサーバーに接続できない

セットアッププロセスを簡略化するために、opencvおよび顔認識用のDockerイメージを作成しました。

しかし、recognize.pyスクリプトは、画像結果を表示するためにXサーバーを必要とします。これが私がこれまでに行ったことです:

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

しかし、それは助けにはなりません。

4
Kasper Hansen

これを実行してみてください、

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>

画像が画面に表示されない、または画像のない空白の画面が表示されるという問題が発生する場合もあります。Docker画像の実行中に上記のスクリプトに--env="_X11_NO_MITSHM=1"を追加してください。それは問題を解決します。

詳細については、以下のリファレンスをチェックすることをお勧めします。

参考1
参照2

0
Afroz Chakure