Python cv2.imshow() 不工作 : cannot connect to X server

标签 python docker opencv terminal centos

情况:在 Windows 主机上的 docker 容器中运行 CentOS 终端。已安装 cv2,运行良好。
脚本:

import sys
import cv2
def main(argv):
        inputfile = ''
        for arg in argv:
                img = cv2.imread(arg)
                cv2.imshow('Image', img)
                cv2.waitkey(0)
if __name__ == "__main__":
        main(sys.argv[1:])

错误:: cannot connect to X server尝试解决方案:[root@b26030f33e65 PythonScripts]# xhost local:root xhost: unable to open display ""

最佳答案

对于 Windows,您可以尝试各种 Xserver 实现中的一种,最简单的一种是 VcXsrv ,其他实现可从 Cygwin 世界获得,也有一些商业解决方案。

主要想法是启动 Xserver 使其在所有接口(interface)上监听 TCP 并且没有任何身份验证,然后通过 TCP 从容器连接到它

inside_container > export DISPLAY="<some ip>:0"
inside_container > # start your whatever

注意:监听所有接口(interface)并且没有 auth 是不安全的,你应该只在初始阶段使用它,直到你让事情运行起来,之后你应该采取必要的步骤来减少“暴露表面”。

现在......我不太确定如何让你的 IP 对容器可见,但我希望这足以让你开始。

稍后编辑:
我找到了 this (过于复杂)分步指南,基本上说的几乎相同:
  • 安装 VcXsrv(或 Xming,或其他)
  • 从以下开始:
  • “多窗口”带来更流畅的体验
  • “没有客户”
  • “禁用访问控制”(再次只是为了避免最初的麻烦)
  • 每当您需要运行一些 GUI 应用程序时,添加 DISPLAY env var 指向你的“显示”
  • # example
    > docker run -ti --rm -e DISPLAY=172.17.0.1:0.0 firefox
    > docker run -ti --rm -e DISPLAY=172.17.0.1:0.0 /bin/sh
    # where "172.17.0.1" would be 1 of your IPs
    

    关于Python cv2.imshow() 不工作 : cannot connect to X server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58922358/

    相关文章:

    python - Matplotlib 两个图表上的相同直方图

    Docker:无法纠正问题,您持有损坏的软件包

    docker - 在 Dockerfile 中运行 composer install

    c++ - 链接到 opencv 的奇怪链接器错误... "LNK1107: invalid or corrupt file: cannot read at 0x2E8"

    python 3 : When is a call to an instance attribute resolved as if it is an instance method?

    Python 请求 - 从 response.text 中提取数据

    mysql - docker 容器中的 Keycloak + 主机上的 MySQL 给出 [org.keycloak.services] (ServerService Thread Pool -- 62) 无法连接到数据库

    python - 如何从裁剪的 numpy 矩形定义顶部和左侧点?

    python-3.x - 为什么sorted(contour)[0]与sorted(contour)[:1]不同

    python - Jupyter:当内核就绪时以编程方式清除所有单元的输出