$DISPLAY设置正确吗?-在docker容器中运行wxPython Phoenix GUI

$DISPLAY设置正确吗?-在docker容器中运行wxPython Phoenix GUI,python,docker,user-interface,xserver,wxpython,Python,Docker,User Interface,Xserver,Wxpython,我想对使用wxPython Phoenix编写的GUI进行docker化,以便在运行docker映像时在主机上显示GUI 下面是一个基本的wxPython Phoenix GUI和Dockerfile,它使用Ubuntu18.04、Python 3.7.5和wxPython Phoenix创建图像 运行映像时,它返回以下消息: docker build -t simple-gui:latest . docker run -it simple-gui /bin/bash root@97229a17

我想对使用wxPython Phoenix编写的GUI进行docker化,以便在运行docker映像时在主机上显示GUI

下面是一个基本的wxPython Phoenix GUI和Dockerfile,它使用
Ubuntu18.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服务器的地址发送到docker映像,然后wxPython Phoenix将使用该映像,但我不确定如何做到这一点

simple-gui.py:(from)

#/usr/bin/env蟒蛇3.7
导入wx
app=wx.app(假)
frame=wx.frame(无,wx.ID_ANY,“你好,世界”)
frame.Show(真)
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"]

如问题中所述,
DISPLAY
变量在docker映像中用于存储主机的X服务器地址。根据主机的不同,它应该采用不同的值

UNIX主机(Linux/MacOS): UNIX已经使用X服务器进行显示

  • 设置显示变量,例如
    DISPLAY=:0.0
  • 使用:
    docker Run-e DISPLAY=$DISPLAY simple gui运行图像
  • Windows主机: Windows不使用X服务器,而是使用Windows桌面管理器

  • 您需要为Windows安装X服务器,常用的选择是
    VcXsrv
  • 将显示变量设置为
    DISPLAY=:0.0
    ,可以使用
    ipconfig
    找到
    的值,它是标记为
    DockerNAT
    的值
  • 使用以下命令运行图像:
    docker Run-e DISPLAY=$DISPLAY simple gui
    (或
    DISPLAY=%DISPLAY%
    ,具体取决于命令行…)
  • 资料来源:

    如果您是Mac用户,您可能必须安装(MacOS的X服务器),启动它,然后使用
    -e DISPLAY=host.docker.internal:0运行容器