Docker _tkinter.TclError: 无法连接到显示器。

22

Ubuntu 16.04,已安装Nvidia-docker,在运行TensorFlow容器,Python 2.7。

我想在容器内运行一个简单的Python代码,如下所示:

from tkinter import *
master = Tk()

canvas_width = 80
canvas_height = 40
w = Canvas(master, 
           width=canvas_width,
           height=canvas_height)
w.pack()

y = int(canvas_height / 2)
w.create_line(0, y, canvas_width, y, fill="#476042")


mainloop()

但是当我运行它时,出现了这个错误

_tkinter.TclError: 没有显示名称和没有$DISPLAY环境变量

根据这个网站的内容 https://github.com/moby/moby/issues/8838,我将我的容器提交为一个镜像,并使用-e标志再次运行它:

-e DISPLAY=:0.0

但是出现了这个错误:

_tkinter.TclError: 无法连接到显示 :0.0

我没有使用ssh登录容器。有谁能给我建议吗?

2个回答

28
这是因为容器无法访问主机的x11套接字。因此,在进行docker运行时,需要包含这两个标志。
-v /tmp/.X11-unix:/tmp/.X11-unix
-e DISPLAY=unix$DISPLAY

在此之后,我们需要进行另一个操作。因为X11的默认设置只允许本地用户打印,所以我们需要将其更改为所有用户。

$ sudo apt-get install x11-xserver-utils
$ xhost +

那么问题就解决了。


1
它在Ubuntu上可以运行!如何让它在Windows上运行? - twitu
1
我正在遵循这个步骤,但仍然出现“无法连接到显示器 '127.0.0.1:0.0'”的错误。 - Marc
2
“xhost +”真的安全吗?因为这允许所有用户连接。如果在本地使用docker,这不应该改为“xhost +local:docker”吗? - Baptiste Merliot

6
<_tkinter.TclError: 无法连接到显示器"localhost:0.0">
我也遇到了同样的错误信息,已经解决。(至少错误信息不再出现!)
export MPLBACKEND='Agg'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接