Docker中的Python Tkinter .TclError:无法连接到显示器

时间:2016-09-12 07:11:57

标签: python ubuntu docker tkinter xfce

我是python的新手,正在尝试构建一个小应用程序。它需要是一个GUI应用程序,我想要用docker容器。我收到以下错误,无法找到解决方案

No protocol specified
No protocol specified
Traceback (most recent call last):
  File "tkinker.py", line 7, in <module>
    tinker = Tk()
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1818, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: couldn't connect to display ":0.0"

它从本地开始,但不会在docker中启动。我的操作系统是Xubuntu。

我创建了一个示例应用(如下所示),请参阅run-test.sh https://github.com/jeremysells/test/tree/master/docker-tkinter

4 个答案:

答案 0 :(得分:1)

作为described here,您需要一个X11图形图层 但由于你已经在'(X)Ubuntu,设置DISPLAY应该足够了:

export DISPLAY=127.0.0.1:0.0

docker run -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix yourImage

同时检查XAuthority

答案 1 :(得分:1)

您必须在容器中设置DISPLAY。您可以将它作为参数添加到docker run命令中,如下所示:

docker run -ti -e DISPLAY=$DISPLAY blah-image blah-command

应在您运行命令的Xubuntu shell中设置DISPLAY。

答案 2 :(得分:0)

在您的终端中输入// Assume -1 should generate an exception Assert.ThrowSameException(UpstreamClass.Func(-1), MyClass.Func(-1)); 。然后

xhost +

为我工作。 docker run --rm \ --network=host --privileged \ -v /dev:/dev \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v $HOME/.Xauthority:/root/.Xauthority \ -it yourimage 禁用访问控制。之后,客户端可以从任何主机进行连接。

答案 3 :(得分:0)

源自 the other answer here 并受到 its such comment 的启发,我的探索最终得到了 2 个可行的解决方案。选择您喜欢的任何一种。

  • xhost local:root && docker -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix your_image
  • xhost local:root && docker -e DISPLAY=$DISPLAY --net=host your_image