2016-09-12 153 views
2

我是python的新手,正在嘗試構建一個小應用程序。它需要是一個圖形用戶界面應用程序,我想與docker集裝箱。我收到以下錯誤並找不到解決方案Docker中的Python Tkinter .TclError:無法連接到顯示器

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

同樣,添加'-e DISPLAY = $ DISPLAY'還不夠。 – VonC

+0

它可能是操作系統特定的,但我不這麼認爲。有誰知道我是否必須在本地配置任何東西才能使其工作? –

+0

對不起,我以爲你在Mac上 – VonC

回答

1

由於described here,那麼你需要一個X11圖形層。
但既然你已經是一個「(X)的Ubuntu,設置顯示應該足夠:

export DISPLAY=127.0.0.1:0.0 

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

檢查也XAuthority

+0

另請參閱https://github.com/docker/docker/issues/8710#issuecomment-71113263來暴露TCP端口上的本地xquartz套接字。 – VonC

1

您必須在容器中設置DISPLAY。您可以添加它作爲這樣的一個參數泊塢窗運行命令:

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

顯示屏應在Xubuntu上設置外殼程序正在運行的命令。

+0

Saidly同樣的問題 #泊塢窗運行-ti -e DISPLAY = $ DISPLAY Tkinter的測試:最新 回溯(最近最後一次通話): 文件 「tkinker.py」,7號線,在 鼓搗= TK() 文件「/usr/lib/python2.7/lib-tk/Tkinter.py」,行1818,在__init__中 self.tk = _tkinter.create(screenName,baseName,className,interactive,wantobjects,useTk,sync,use) _tkinter.TclError:無法連接到顯示「:0.0」 –

+0

是否顯示在啓動命令的shell中設置?你能夠從Docker外部運行GUI嗎? – SidJ

+0

是顯示器已啓用。當我運行'#echo $ DISPLAY'時,它返回「:0.0」。我不知道它是否與xauth有關(http://stackoverflow.com/questions/16296753/can-you-run-gui-apps-in-a-docker-container和http://wiki.ros.org /搬運工/教程/ GUI)。目前我沒有任何空閒時間,所以當我這樣做的時候,必須回到測試階段 –

相關問題