X11 显示变量未设置 - 无法 运行 Docker 图片

X11 Display variable is not set - can't run Docker Image

我制作了 JMeter 的 Docker-Image,因为我想 运行 它远程(从云端)。如果我 运行 我收到错误的图像:'No X11 DISPLAY variable was set, but this program performed an operation which requires it.'

我已经更新了 ssh_config 文件和 sshd_config 文件(如类似问题中所述),但它仍然不起作用。

并且我的 DISPLAY 变量设置为 localhost:10.0。知道我在 Ubuntu 19.04.

的虚拟机上执行此操作可能很有用

感谢您的帮助。

Docker-Images 没有解决方案。因为 Docker 不支持 GUI,因此出现此错误。因此,如果您正在使用 Docker 并且收到此错误,请忽略它或将您的图像更新为仅 non-gui.

干杯

您应该这样声明 DISPLAY variable using ENV command

ENV DISPLAY :10

但请注意,您至少需要有一个显示服务器 Xvfb

所以 运行 JMeter GUI 在 Docker 容器中是可能的,但你必须像对待普通的 Linux 桌面一样对待它,它可以是像 Xfce

例子Dockerfile which downloads latest JMeter, installs virtual desktop and makes it available via VNC and RDP

FROM alpine:edge

ENV DISPLAY :99
ENV RESOLUTION 1366x768x24

RUN  echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
    && apk add --no-cache curl xfce4-terminal xvfb x11vnc xfce4 openjdk8-jre bash xrdp \
    && curl -L https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.1.1.tgz >  /tmp/jmeter.tgz \
    && tar -xvf /tmp/jmeter.tgz -C /opt \
    && rm /tmp/jmeter.tgz \
    && curl -L https://jmeter-plugins.org/get/ > /opt/apache-jmeter-5.1.1/lib/ext/jmeter-plugins-manager.jar \
    && echo "[Globals]" > /etc/xrdp/xrdp.ini \
    && echo "bitmap_cache=true" >> /etc/xrdp/xrdp.ini \
    && echo "bitmap_compression=true" >> /etc/xrdp/xrdp.ini \
    && echo "autorun=jmeter" >> /etc/xrdp/xrdp.ini \
    && echo "[jmeter]" >> /etc/xrdp/xrdp.ini \
    && echo "name=jmeter" >> /etc/xrdp/xrdp.ini \
    && echo "lib=libvnc.so" >> /etc/xrdp/xrdp.ini \
    && echo "ip=localhost" >> /etc/xrdp/xrdp.ini \
    && echo "port=5900" >> /etc/xrdp/xrdp.ini \
    && echo "username=jmeter" >> /etc/xrdp/xrdp.ini \
    && echo "password=" >> /etc/xrdp/xrdp.ini

EXPOSE 5900
EXPOSE 3389

CMD ["bash", "-c", "rm -f /tmp/.X99-lock && rm -f /var/run/xrdp.pid\
 && nohup bash -c \"/usr/bin/Xvfb :99 -screen 0 ${RESOLUTION} -ac +extension GLX +render -noreset && export DISPLAY=99 > /dev/null 2>&1 &\"\
  && nohup bash -c \"startxfce4 > /dev/null 2>&1 &\"\
   && nohup bash -c \"x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :99 -forever -bg -nopw -rfbport 5900 > /dev/null 2>&1\"\
    && nohup bash -c \"xrdp > /dev/null 2>&1\"\
     && nohup bash -c \"/opt/apache-jmeter-5.1.1/bin/./jmeter -Jjmeter.laf=CrossPlatform > /dev/null 2>&1 &\"\
       && tail -f /dev/null"]

你可以build这样:

docker build -t jmeter.

完成后使用 Docker run 命令启动容器,例如:

docker run -p 5900:5900 -p 3389:3389 jmeter

您可能还会发现 Make Use of Docker with JMeter - Learn How 指南很有用。

经过几个小时的搜索,我找到了解决方案:(credit) 我的设置是 ubuntu 18.04,lxde,这个 docker build 我这样修改了 运行 脚本:

#!/bin/bash
#
# Run JMeter Docker image with options

NAME="jmeter"
JMETER_VERSION=${JMETER_VERSION:-"5.4"}
IMAGE="justb4/jmeter:${JMETER_VERSION}"

# Finally run
xhost +
docker run -e DISPLAY=$DISPLAY  --rm --name ${NAME} -i -v ${PWD}:${PWD} -v /tmp/.X11-unix:/tmp/.X11-unix:ro  -w ${PWD} ${IMAGE} $@
xhost -

这项工作,就工作而言,它比另一种方法 (vnc...) 少得多