我是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
答案 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