我需要从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容器?
答案 0 :(得分:2)
我们几乎有同样的情况。 Bamboo是CI / CD工具,selenium和java8是回归测试的工具,所有这些都在docker容器内运行。所以我可以说它是100%可能的。
可能对你有帮助的是xvbf(无头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如何运行,以防它们运行。
答案 1 :(得分:-2)
我们还可以将docker容器直接连接到用户Xserver:查看Can you run GUI apps in a docker container?的答案