Xvfb和Docker - 无法打开显示屏

20

我需要运行XVFB和Docker,并使用Firefox,但无法使它们一起运行。

这是我的Dockerfile:

FROM abevoelker/ruby:latest # based on ubuntu
ENV TERM linux
RUN apt-get update && apt-get install -y .....

ENV DISPLAY :99

# Install Xvfb init script
ADD xvfb_init /etc/init.d/xvfb # default xvfb init.d
RUN chmod a+x /etc/init.d/xvfb

CMD ["firefox"]

我从Firefox收到的错误信息是:

 Error: cannot open display: :99

2
CMD["xvfb-run firefox"]是什么意思? - Michael
嗨,Michael,感谢你的帮助!问题在于这背后的真正想法是在 Ruby 程序中使用 Firefox 启动 Selenium WebDriver,因此我无法使用 xvfb_run。 - overlox
2
我正是为此使用xvfb_run - xvfb_run bundle exec cucumber --profile jenkins - Michael
1
你正在使用 MacOS 运行吗? - Rico
1个回答

21

我通过编写一个启动脚本来解决这个问题,这个脚本将会:

  1. 启动 xvfb
  2. 启动 firefox

通过在容器启动时通过 CMD 执行该脚本,可以保证命令以正确的顺序运行。

Dockerfile

...
ENV DISPLAY :99

ADD run.sh /run.sh
RUN chmod a+x /run.sh

CMD /run.sh

运行run.sh脚本。

Xvfb :99 -screen 0 640x480x8 -nolisten tcp &
firefox

4
将它放入自己的脚本中,跟你原来的 Dockerfile 有什么不同? - Scott Stensland
7
Docker本身没有服务管理器,因此初始示例中的Xvfb启动脚本没有任何效果。通过将它移到一个脚本中,在容器启动时执行(CMD),Xvfb能够在容器中正确启动。 - baer
@baer,您能详细说明一下吗?既然还没有服务管理器,为什么脚本能够正确启动? - Charalamm
3
如果您遇到“_XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.”错误或警告,请在命令中添加“-nolisten unix”。命令为“Xvfb :99 -screen 0 640x480x8 -nolisten tcp -nolisten unix”。 - arvin_v_s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接