【问题标题】:Cypress cannot run in Docker containerCypress 无法在 Docker 容器中运行
【发布时间】:2021-12-22 15:26:48
【问题描述】:

我有一个在 Docker 容器中运行的 Web 应用程序。据我了解,使用“cypress/base”映像应该提供必要的依赖项。但是,尝试从附加的 shell(无头运行)启动 Cypress 测试会导致以下输出:

Unhandled rejection Error: Your system is missing the dependency: Xvfb

Install Xvfb and run Cypress again.

Read our documentation on dependencies for more information:

https://on.cypress.io/required-dependencies

If you are using Docker, we provide containers with all required dependencies installed.

----------

Error: spawn Xvfb ENOENT

----------

Platform: linux (Debian - 10.11)
Cypress Version: 8.5.0
    at /app/node_modules/cypress/lib/errors.js:328:17
    at tryCatcher (/app/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/app/node_modules/bluebird/js/release/promise.js:547:31)
    at Promise._settlePromise (/app/node_modules/bluebird/js/release/promise.js:604:18)
    at Promise._settlePromise0 (/app/node_modules/bluebird/js/release/promise.js:649:10)
    at Promise._settlePromises (/app/node_modules/bluebird/js/release/promise.js:729:18)
    at Promise._fulfill (/app/node_modules/bluebird/js/release/promise.js:673:18)
    at Promise._resolveCallback (/app/node_modules/bluebird/js/release/promise.js:466:57)
    at Promise._settlePromiseFromHandler (/app/node_modules/bluebird/js/release/promise.js:559:17) 
    at Promise._settlePromise (/app/node_modules/bluebird/js/release/promise.js:604:18)

手动安装 Xvfb 并不能解决问题;它只会导致另一个错误,说明无法解析 Cypress 的依赖项。

Dockerfile:

FROM node:16

RUN mkdir /app

WORKDIR /app
COPY package.json .
COPY yarn.lock .
RUN yarn
RUN npx browserslist@latest --update-db
COPY . .


CMD ["yarn", "start"]

docker-compose.yml:

version: "3"

services:
  ponder:
    image: cypress/base:16
    container_name: myApplication
    build: ./
    volumes:
      - ./src:/app/src
      - ./public:/app/public
      - ./package.json:/app/package.json
      - /app/node_modules
    ports:
      - 3001:3000
    stdin_open: true

想法?

编辑:

Xvfb 是通过运行apt-get update 手动安装的,然后运行apt-get install xvfb。在此之后尝试运行赛普拉斯,给出:

Unhandled rejection Error: Cypress failed to start.

This may be due to a missing library or dependency. https://on.cypress.io/required-dependencies

Please refer to the error below for more details.

----------

/root/.cache/Cypress/8.5.0/Cypress/Cypress: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory

----------

Platform: linux (Debian - 10.11)
Cypress Version: 8.5.0
    at /app/node_modules/cypress/lib/errors.js:328:17
    at tryCatcher (/app/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/app/node_modules/bluebird/js/release/promise.js:547:31)
    at Promise._settlePromise (/app/node_modules/bluebird/js/release/promise.js:604:18)
    at Promise._settlePromise0 (/app/node_modules/bluebird/js/release/promise.js:649:10)
    at Promise._settlePromises (/app/node_modules/bluebird/js/release/promise.js:729:18)
    at Promise._fulfill (/app/node_modules/bluebird/js/release/promise.js:673:18)
    at Promise._resolveCallback (/app/node_modules/bluebird/js/release/promise.js:466:57)
    at Promise._settlePromiseFromHandler (/app/node_modules/bluebird/js/release/promise.js:559:17)
    at Promise._settlePromise (/app/node_modules/bluebird/js/release/promise.js:604:18)
    at Promise._settlePromise0 (/app/node_modules/bluebird/js/release/promise.js:649:10)
    at Promise._settlePromises (/app/node_modules/bluebird/js/release/promise.js:729:18)
    at Promise._fulfill (/app/node_modules/bluebird/js/release/promise.js:673:18)
    at Promise._resolveCallback (/app/node_modules/bluebird/js/release/promise.js:466:57)
    at Promise._settlePromiseFromHandler (/app/node_modules/bluebird/js/release/promise.js:559:17)
    at Promise._settlePromise (/app/node_modules/bluebird/js/release/promise.js:604:18)

【问题讨论】:

  • 能否添加安装xfvb的具体命令以及返回的具体错误是什么?
  • 好的,我现在已经添加了,@agoff。
  • 看来cypress/base 实际上并没有提供所有必要的要求,因为您的容器缺少libnss.so。在基于 Debian 的发行版上,可以在 libnss3 包中找到

标签: docker docker-compose cypress


【解决方案1】:

尝试使用 FROM cypress/included 代替 FROM node:16。该图像已经带有节点 16 并预装了浏览器。注意:图片可能会大很多。

不错的尝试,但你做得有点过头了。

【讨论】:

  • 感谢您的回答。使用FROM cypress/included:9.2.0,会出现相同的错误消息(Xvfb)。
猜你喜欢
  • 1970-01-01
  • 2021-07-14
  • 2020-04-12
  • 2022-07-18
  • 2019-05-05
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多