X11显示变量未设置-无法运行Docker映像

时间:2019-07-23 09:12:16

标签: linux docker ubuntu jmeter x11-forwarding

我制作了JMeter的Docker-Image,因为我想远程运行它(并从云中运行)。如果我运行Image,则会收到错误消息:“未设置X11 DISPLAY变量,但是此程序执行了需要它的操作。”

我已经更新了ssh_config文件和sshd_config文件(如类似问题中所述),但仍然无法正常工作。

enter image description here

并且我的DISPLAY变量设置为localhost:10.0。知道我正在Ubuntu 19.04的VM上执行此操作可能很有用。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

没有针对Docker-Images的解决方案。由于Docker不支持GUI,因此出现此错误。因此,如果您正在使用Docker并遇到此错误,请忽略它或将映像更新为仅非GUI。

欢呼

答案 1 :(得分:0)

您应使用DISPLAY声明此ENV command变量,如:

ENV DISPLAY :10

但是请注意,您至少需要Xvfb的显示服务器。

因此可以在Docker容器中运行JMeter GUI,但是您必须将其像普通的Linux桌面一样对待,它可能像Xfce一样是最小的

示例Dockerfile下载了最新的JMeter,安装了虚拟桌面,并通过VNCRDP使其可用

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指南很有用。