$ DISPLAY установлен правильно? - Запуск графического интерфейса wxPython Phoenix в док-контейнере - PullRequest
0 голосов
/ 16 октября 2019

Я хотел бы докеризировать GUI, написанный с помощью wxPython Phoenix, для того, чтобы GUI отображался на хосте при запуске образа docker.

Ниже приведен базовый графический интерфейс wxPython Phoenix и Dockerfile, который создает образс Ubuntu 18.04, Python 3.7.5 и wxPython Phoenix.

При запуске образа возвращается следующее сообщение:

docker build -t simple-gui:latest .
docker run -it simple-gui /bin/bash
root@97229a17f2cd:~/python# ./simple_gui.py
Unable to access the X Display, is $DISPLAY set properly?

Я понимаю, что должен отправить адрес хостаX-сервер к образу докера, который затем будет использоваться wxPython Phoenix, но я не уверен, как это сделать.

simple-gui.py: (из wxPython Phoenix wiki )

#!/usr/bin/env python3.7

import wx

app = wx.App(False)
frame = wx.Frame(None, wx.ID_ANY, "Hello World")
frame.Show(True)
app.MainLoop()

Dockerfile:

FROM ubuntu:18.04

# Install dependencies for Python and wxPython Phoenix
RUN apt update && apt install -y \
    libwebkitgtk-3.0-dev \
    libgtk-3-dev \
    libsm-dev \
    freeglut3 \
    freeglut3-dev \
    libnotify-dev \
    libgstreamer1.0-dev \
    libgstreamer-plugins-base1.0-dev \
    dpkg-dev \
    build-essential \
    python3.7-dev \
    libjpeg-dev \
    libtiff-dev \
    libsdl1.2-dev \
    software-properties-common \
# Install Python 3.7 and pip latest versions
    && add-apt-repository ppa:deadsnakes/ppa \
    && apt install -y python3.7 python3-pip \
    && python3.7 -m pip install -U --no-cache-dir pip \
# Install wx
    && python3.7 -m pip install -U --no-cache-dir -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-18.04 wxPython

# Copy files
COPY simple_gui.py /root/python/
WORKDIR /root/python
ENTRYPOINT ["./simple_gui.py"]

1 Ответ

0 голосов
/ 06 ноября 2019

Как сказано в вопросе, переменная DISPLAY используется в образе докера для хранения адреса X-сервера хоста. В зависимости от хоста он может принимать разные значения.

Хост UNIX (Linux / MacOS):

UNIX уже использует X-сервер для отображения.

  1. Установите переменную DISPLAY, например DISPLAY=:0.0.
  2. . Запустите ваш образ с помощью: docker run -e DISPLAY=$DISPLAY simple-gui

Хост Windows:

Windows использует не X-сервер, а Windows Desktop Manager.

  1. Вам необходимо установить X-сервер для Windows, популярный выбор - VcXsrv.
  2. Установите для переменной DISPLAY значение DISPLAY=<HOST_IP>:0.0, значение для <HOST_IP> может бытьнайдено с помощью ipconfig, это тег DockerNAT.
  3. Запустите ваше изображение с помощью: docker run -e DISPLAY=$DISPLAY simple-gui (или DISPLAY=%DISPLAY%, в зависимости от командной строки ...)

Источники:

...