2016-09-12 2 views
2

저는 python에 익숙하지 않고 작은 응용 프로그램을 만들려고합니다. 그것은 GUI 애플 리케이션이어야하고 나는 도커로 그것을 containerising 싶었어요. 다음과 같은 오류가 발생하여 해결책을 찾을 수 없습니다.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) 우분투에 이미 있기 때문에
그러나, 디스플레이를 설정하면 충분해야한다 : 또한 XAuthority

export DISPLAY=127.0.0.1:0.0 

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

확인합니다.

+0

또한 TCP 포트에 로컬 xquartz 소켓을 노출 시키려면 https://github.com/docker/docker/issues/8710#issuecomment-71113263을 참조하십시오. – VonC

1

컨테이너에 DISPLAY를 설정해야합니다. 이 같은 고정 표시기 실행 명령에 대한 인수로 추가 할 수 있습니다 :

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

DISPLAY 당신이에서 명령을 실행하는 쉘 분투에 설정해야합니다.

+0

Saidly 같은 문제 #이 -ti -e DISPLAY = $ 디스플레이 Tkinter의 테스트를 실행 고정 표시기 : 최신 역 추적 (마지막으로 가장 최근 통화) : 파일 "tkinker.py", 7 호선을 어설프게에서 = TK에() 파일 "/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). 나는 현재 자유 시간이 없기 때문에 내가 할 때 이것을 시험해야한다. –

관련 문제