$DISPLAY 设置正确吗? - 运行 docker 容器中的 wxPython Phoenix GUI
is $DISPLAY set properly? - Running a wxPython Phoenix GUI in a docker container
我想 docker 化一个用 wxPython Phoenix 编写的 GUI,以便在 运行 docker 图像时使 GUI 出现在主机上。
下面是一个基本的 wxPython Phoenix GUI 和使用 Ubuntu 18.04
、Python 3.7.5
和 wxPython Phoenix
.
创建图像的 Dockerfile
当运行图像时,它returns以下信息:
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 将使用该图像,但我不确定该怎么做。
简单-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()
Docker 文件:
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 变量,例如
DISPLAY=:0.0
。
- 运行 您的图片具有:
docker run -e DISPLAY=$DISPLAY simple-gui
Windows 主持人:
Windows 不使用 X 服务器,但 Windows 桌面管理器。
- 您需要为 Windows 安装一个 X 服务器,一个流行的选择是
VcXsrv
。
- 将 DISPLAY 变量设置为
DISPLAY=<HOST_IP>:0.0
,<HOST_IP>
的值可以使用 ipconfig
找到,它是标记为 DockerNAT
的值。
- 运行 您的图像具有:
docker run -e DISPLAY=$DISPLAY simple-gui
(或 DISPLAY=%DISPLAY%
,取决于您的命令行...)
来源:
如果您是 Mac 用户,您可能需要安装 XQuartz(MacOS 的 X 服务器),启动它,然后 运行 你的容器 -e DISPLAY=host.docker.internal:0
.
我想 docker 化一个用 wxPython Phoenix 编写的 GUI,以便在 运行 docker 图像时使 GUI 出现在主机上。
下面是一个基本的 wxPython Phoenix GUI 和使用 Ubuntu 18.04
、Python 3.7.5
和 wxPython Phoenix
.
当运行图像时,它returns以下信息:
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 将使用该图像,但我不确定该怎么做。
简单-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()
Docker 文件:
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 变量,例如
DISPLAY=:0.0
。 - 运行 您的图片具有:
docker run -e DISPLAY=$DISPLAY simple-gui
Windows 主持人:
Windows 不使用 X 服务器,但 Windows 桌面管理器。
- 您需要为 Windows 安装一个 X 服务器,一个流行的选择是
VcXsrv
。 - 将 DISPLAY 变量设置为
DISPLAY=<HOST_IP>:0.0
,<HOST_IP>
的值可以使用ipconfig
找到,它是标记为DockerNAT
的值。 - 运行 您的图像具有:
docker run -e DISPLAY=$DISPLAY simple-gui
(或DISPLAY=%DISPLAY%
,取决于您的命令行...)
来源:
如果您是 Mac 用户,您可能需要安装 XQuartz(MacOS 的 X 服务器),启动它,然后 运行 你的容器 -e DISPLAY=host.docker.internal:0
.