无法启动 Xvfb, 服务器已经在运行。

5

我正在尝试使用Node.js的spawn命令以并行方式运行两个Cypress Docker容器。

docker run -v path/to/ws:/e2e -w /e2e --network host cypress/included:8.0.0 --spec 'cypress/integration/cytorus-cache/1.feature'

docker run -v path/to/ws:/e2e -w /e2e --network host cypress/included:8.0.0 --spec 'cypress/integration/cytorus-cache/2.feature'

它会出现以下错误:

Xvfb exited with a non zero exit code.

There was a problem spawning Xvfb.

This is likely a problem with your system, permissions, or installation of Xvfb.

----------

Error: _XSERVTransSocketUNIXCreateListener: ...SocketCreateListener() failed

_XSERVTransMakeAllCOTSServerListeners: server already running
(EE)
Fatal server error:
(EE) Cannot establish any listening sockets - Make sure an X server isn't already running(EE)

简言之,如果我运行4个并行进程,其中1个连接到X11服务器,而3个会出现错误。

该如何处理?我已经尝试在Cypress默认运行为无头模式时设置unset DISPLAY,但没有帮助。

2个回答

5

当我并行运行 cypress 测试时,我遇到了同样的问题。

对于我来说解决方法是从你的命令中删除 --network host 以避免端口冲突。你可能需要找到另一种方法来访问主机上的服务。

例如,在 Docker for Linux 上可以使用 172.17.0.1 来访问主机。


1
谢谢。是的,--network host 导致了问题。由于主机是 AWS EC2 实例,我在运行测试时不知道机器地址。此外,应用程序可以通过一些主机名(例如 localhost.example.com)访问,因为证书已注册到 *.example.com - Amit Kumar Gupta
我已经尝试过 -e CYPRESS_baseUrl=http://host.docker.internal:3332--add-host "localhost.example.com:127.0.0.1",但都没有起作用。我不想在 Cypress 配置中设置基本路径。Cypress 在无头模式下运行,所以我并不希望它连接 X11 服务器。有什么方法可以运行它吗? - Amit Kumar Gupta
似乎问题已经在cypress docker页面上描述了。其中一个解决方案起作用了。我将在Jenkins上验证它并发布最终解决方案。 - Amit Kumar Gupta

2
根据cypress docker documentation,在Linux上运行Cypress需要一个X11服务器;否则,它会在测试运行期间生成自己的X11服务器。当同时运行多个Cypress实例时,同时生成多个X11服务器可能会导致某些问题。在这种情况下,您可以单独启动一个X11服务器,并使用DISPLAY变量将服务器的地址传递给每个Cypress实例。
由于X11服务器已经在服务器上运行,所以我只需生成Xvfb:99&,然后设置地址export DISPLAY=:99。并将DISPLAY环境变量传递给docker cypress容器。

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