【发布时间】: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 和共享桌面设置,如下所示:
- Can you run GUI apps in a docker container?
- https://github.com/dockerfile/ubuntu-desktop
- https://github.com/fcwu/docker-ubuntu-vnc-desktop
- https://hub.docker.com/r/dorowu/ubuntu-desktop-lxde-vnc/
- https://blog.docker.com/2013/07/docker-desktop-your-desktop-over-ssh-running-inside-of-a-docker-container/
- Build a full Ubuntu desktop docker image
- http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/
但是,这仍然不允许我的 Java 应用程序执行 GUI 应用程序。像往常一样,我确定我在这里遗漏了一些简单的东西。
如何通过访问 UI 来执行 Jetty 容器?
【问题讨论】:
-
我认为您的尝试与我们对 sakuli 项目的尝试相同。你可以看看这些Dockerfile.sakuli.ubuntu.xfce.java ase 很好的起点。示例java-selenium-example 展示了如何在这种容器中执行基于 maven 的 java 测试。
-
也许这是这个线程的副本stackoverflow.com/questions/16296753/…
标签: docker