Docker – Tkinter: couldn’t connect to display

I want to run 3 Docker containers and start a simple programm.

  • Python
  • Postgres
  • Adminer

I’m using docker-compose and dockerfiles to run and build all these containers. Everything work well until I want to start a GUI in my Python app. I’m using Tkinter and Plot to show my Application, but every time I’m starting the docker-compose file, I get a error like:

_tkinter.TclError: couldn't connect to display "unix:1"

You can see the files below:

docker-compose.yml

version: '3.1'

services:
  mypython:
    container_name: tsp_python
    build:
      context: .
      dockerfile: ./config/python/Dockerfile
    depends_on:
      - db
      - adminer
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix:rw
    environment:
      DISPLAY: unix$DISPLAY

  db:
    container_name: tsp_postgres
    image: postgres:11
    build:
      context: .
      dockerfile: ./config/postgres/Dockerfile
    restart: always
    ports:
      - 5432:5432
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_PASSWORD: ${DB_USER}
      POSTGRES_USER: ${DB_PASSWORD}

  adminer:
    container_name: tsp_adminer
    image: adminer
    restart: always
    ports:
      - 8080:8080
    depends_on:
      - db

volumes:
  db-data:

The python Dockerfile:

FROM python:3.7.3

WORKDIR /code

RUN pip3 install --upgrade pip

COPY ./require.txt .
RUN pip install -r require.txt

COPY /src .

ENV PYTHONPATH "${PYTHONPATH}:/code"

EXPOSE 5432/tcp

CMD ["python", "__main__.py"]

Source: Docker Questions