【问题标题】:Docker with GUI application带有 GUI 应用程序的 Docker
【发布时间】:2016-05-25 18:18:29
【问题描述】:

TL;DR

我需要从在 Docker 容器的后台运行的 Java 应用程序中启动 Selenium。启动失败,因为在运行时无法访问 X11 环境。请参阅下面我开始的Dockerfile

我该怎么办?

问题

我从一个简单的Dockerfile 开始,它安装 Java 8 和 Jetty 9.3.x 来运行一个简单的服务(实际上是 Selenium 的东西)。该服务实际上设置为启动一些需要 UI 才能执行的事情。我遇到的问题是那里的任何东西的执行都失败了,因为 UI 在我运行的配置中不可用。我还有一些使用 supervisord 运行的其他东西,但这是基本设置:

Dockerfile

FROM ubuntu:16.04

RUN apt-get update -y && \
    apt-get install -y software-properties-common wget supervisor && \
    mkdir -p /var/log/supervisor && \
    mkdir -p /etc/supervisor/conf.d

RUN useradd -Ums /bin/bash jetty

RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \
  add-apt-repository -y ppa:webupd8team/java && \
  apt-get update && \
  apt-get install -y oracle-java8-installer && \
  rm -rf /var/lib/apt/lists/* && \
  rm -rf /var/cache/oracle-jdk8-installer

ENV JAVA_HOME /usr/lib/jvm/java-8-oracle

ENV JETTY_VERSION "9.3.7.v20160115"
ENV JETTY_HOME "/opt/jetty"

RUN wget -q -O /opt/jetty.tgz "http://download.eclipse.org/jetty/${JETTY_VERSION}/dist/jetty-distribution-${JETTY_VERSION}.tar.gz" && \
    cd /opt && \
    tar -zxvf /opt/jetty.tgz && \
    rm /opt/jetty.tgz && \
    mv "/opt/jetty-distribution-${JETTY_VERSION}" "${JETTY_HOME}" && \
    chown -R jetty:jetty "${JETTY_HOME}"

ADD supervisor.conf /etc/supervisor.conf
ADD jetty.sv.conf /etc/supervisor/conf.d/jetty.sv.conf

CMD ["supervisord", "-c", "/etc/supervisor.conf"]

jetty.sv.conf

[program:jetty]
command=/usr/bin/java -jar /opt/jetty/start.jar jetty.home=/opt/jetty jetty.base=/opt/jetty
redirec_stderr=true
startsecs=5

我想确保一切都在 UI 环境中运行,而不是在无头环境中。

我尝试了什么

我尝试使用 VNC 和共享桌面设置,如下所示:

但是,这仍然不允许我的 Java 应用程序执行 GUI 应用程序。像往常一样,我确定我在这里遗漏了一些简单的东西。

如何通过访问 UI 来执行 Jetty 容器?

【问题讨论】:

标签: docker


【解决方案1】:

我们的情况几乎相同。 Bamboo 是 CI/CD 工具,selenium 和 java8 是回归测试工具,所有这些都在 docker 容器内运行。所以我可以说这是 100% 可能的。

xvbf(headless X-server)和 x11vnc(vnc-server 可以帮助您查看容器内部实际发生的情况)可能对您有所帮助

RUN set -x &&\
    apt-get update &&\
    apt-get install -y xvfb x11vnc &&\
    apt-get clean autoremove &&\
    mkdir ~/.vnc/ && x11vnc -storepasswd 111222 ~/.vnc/passwd &&\
    echo "export DISPLAY=:0" >> ~/.bashrc

如果你愿意,你也可以安装firefox

RUN     set -x\
        && curl -O https://ftp.mozilla.org/pub/firefox/releases/47.0.1/linux-x86_64/ru/firefox-47.0.1.tar.bz2\
        && tar xvjf firefox-47.0.1.tar.bz2 -C /usr/local/src\
        && rm -rf firefox-47.0.1.tar.bz2\
    && ln -s /usr/local/src/firefox/firefox /usr/local/bin/firefox

将此命令添加到启动向导或入口点脚本中

source ~/perl5/perlbrew/etc/bashrc
rm -f /tmp/.X10-lock
Xvfb :0 -screen 0 1600x1200x24 &
firefox -height 1200 -width 1600 &
x11vnc -usepw -forever -shared &

启动容器后,您将能够通过任何 vnc 客户端连接到该容器并查看 firefox 欢迎页面,或者 webtests 的运行情况,以防它们正在运行。

【讨论】:

    【解决方案2】:

    我们还可以将 docker 容器直接连接到用户 Xserver:请参阅Can you run GUI apps in a docker container? 的答案

    【讨论】:

      猜你喜欢
      • 2014-07-13
      • 2015-12-30
      • 2023-03-12
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      相关资源
      最近更新 更多