Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python Tkinter in Docker .TclError: couldn't connect to display

I am new to python and am trying to build a small app. It needs to be a GUI app and I was wanting to containerise it with docker. I am getting the following error and can not find a solution

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"

It starts locally but wont start in docker. My OS is Xubuntu.

I have created a sample app (below), see run-test.sh https://github.com/jeremysells/test/tree/master/docker-tkinter

like image 621
Jeremy Sells Avatar asked Sep 12 '16 07:09

Jeremy Sells


2 Answers

As described here, you would need an X11 graphic layer.
But since you are already on an '(X)Ubuntu, setting the DISPLAY should be enough:

export DISPLAY=127.0.0.1:0.0

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

Check also XAuthority.

like image 77
VonC Avatar answered Nov 13 '22 21:11

VonC


Type xhost + in your terminal. Then

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

worked for me. xhost + disables access control. After which a client can connect from any host.

like image 2
Dilawar Avatar answered Nov 13 '22 20:11

Dilawar