2016-09-12 67 views
2

私はPythonには新しく、小さなアプリケーションを構築しようとしています。それはGUIアプリケーションである必要があり、私はドッカーでそれを容器に入れたいと思っていた。次のエラーが表示され、解決策を見つけることができません。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" 

これはローカルで開始されますが、ドッカーでは開始されません。私のOSはXubuntuです。私はサンプルアプリケーションを(下)作成した

は、あなたがX11グラフィック層が必要になり、described hereとしてhttps://github.com/jeremysells/test/tree/master/docker-tkinter

+0

再度、 '-e DISPLAY = $ DISPLAY'を追加するだけでは不十分です。 – VonC

+0

OS固有のものかもしれませんが、私はそうは思わないでしょう。私はこれを動作させるために何かをローカルに設定する必要があるかどうか知っていますか? –

+0

申し訳ありませんが、あなたがMacであると思っていた – VonC

答えて

1

run-test.sh参照してください。あなたは「(X)Ubuntuの上に既にあるので、
しかし、DISPLAYを設定するだけでは十分でなければなりません。また、XAuthority

export DISPLAY=127.0.0.1:0.0 

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

チェック。

+0

https://github.com/docker/docker/issues/8710#issuecomment-71113263も参照して、TCPポート上にローカルのxquartzソケットを公開してください。 – VonC

1

コンテナにDISPLAYを設定する必要があります。あなたはこのようなドッキングウィンドウrunコマンドの引数として、それを追加することができます。

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

DISPLAYはあなたからのコマンドを実行しているシェルのXubuntuに設定する必要があります。

+0

Saidly同じ問題 #はドッキングウィンドウは-ti -e DISPLAY = $表示Tkinterのテストを実行します。最新の トレースバック(最新の呼び出しの最後): ティンカー= Tkの() で ファイル "tkinker.py"、7行目を、ファイル "/usr/lib/python2.7/lib-tk/Tkinter.py"、1818行目、__init__ self.tk = _tkinter.create(screenName、baseName、className、対話型、wantobjects、useTk、sync、use) _tkinter.TclError: "0.0"を表示するために接続できませんでした。 –

+0

コマンドを起動するシェルに表示が設定されていますか?ドッカーの外から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)。私は現時点では自由な時間を持っていないので、私がするときにこれをテストすることに戻らなければならないでしょう –

関連する問題