Docker compose 为什么testcafe-docker.sh忽略app init delay参数?

Docker compose 为什么testcafe-docker.sh忽略app init delay参数?,docker-compose,continuous-integration,automated-tests,e2e-testing,testcafe,Docker Compose,Continuous Integration,Automated Tests,E2e Testing,Testcafe,我正在尝试构建一个docker compose,将我的应用程序作为一项服务,将testcafe作为另一项服务。这两个容器都是构建和初始化的,但我不能让testcafe等到我的应用程序可用时才开始运行测试 我尝试将--app init delay 30000作为参数传递给testcafe-docker.sh,但它忽略了它 entrypoint: ["/opt/testcafe/docker/testcafe-docker.sh", "'chromium --no-sandbox'", "--app

我正在尝试构建一个docker compose,将我的应用程序作为一项服务,将testcafe作为另一项服务。这两个容器都是构建和初始化的,但我不能让testcafe等到我的应用程序可用时才开始运行测试

我尝试将--app init delay 30000作为参数传递给testcafe-docker.sh,但它忽略了它

entrypoint: ["/opt/testcafe/docker/testcafe-docker.sh", "'chromium --no-sandbox'", "--app-init-delay 30000", "e2e"]
在调用testcafe-docker.sh之前,还尝试在entrypoint或命令中使用脚本。在中,该命令似乎与entrypoint命令冲突,在entrypoint上使用它时,我让testcafe等待,但不是运行测试,而是以“操作超时”结束

entrypoint: ['/script/wait-for', 'app:8080 -- "/opt/testcafe/docker/testcafe-docker.sh chromium --no-sandbox e2e"']
(似乎wait for的所有参数都需要位于数组的同一条目中,才能作为入口点脚本工作)

这是我的docker文件

version: "2"
services:
  app:
    container_name: app
    build: ./dist/docker/
    ports:
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./dist/docker/dependency:/dependency

  testcafe:
    container_name: testcafe
    image: testcafe/testcafe
    depends_on:
      - app
    volumes:
      - ./test/e2e:/e2e
      - ./package.json:/package.json
      - ./package-lock.json:/package-lock.json
      - ./script:/script
    entrypoint: ['/script/wait-for', 'app:8080 -- "/opt/testcafe/docker/testcafe-docker.sh chromium --no-sandbox e2e"']
#    entrypoint: ["/opt/testcafe/docker/testcafe-docker.sh", "'chromium --no-sandbox'", "--app-init-delay 30000", "e2e"]
看来我很快就要解决wait for的问题了,但不知何故,我的入口点语法不正确

您可以做得更简单一些:

  testcafe:
    container_name: testcafe
    image: testcafe/testcafe
    depends_on:
      - app
    volumes:
      - ./test/e2e:/e2e
      - ./package.json:/package.json
      - ./package-lock.json:/package-lock.json
      - ./script:/script
    entrypoint: ['/script/run.sh']
在文件夹脚本中创建run.sh并使其可执行:

#!/bin/bash

/script/wait-for app:8080 -t 60 -- /opt/testcafe/docker/testcafe-docker.sh chromium --no-sandbox e2e

谢谢你的提示。这使它更具可读性,但并不能解决问题。Testcafe仍然以“操作超时”终止,而不执行tests@MiguelSuárez你提到“但不知怎么的,我的入口点语法是不正确的”,我修正了这一点。现在,对于无法工作的脚本:“等待”脚本的默认超时为15秒。也许你的应用程序需要更多的时间才能启动,所以请尝试增加超时时间:“/script/wait-for-app:8080-t 60…”(最多等待1分钟)有两个问题。1.脚本运行必须使用不同的解释器#/垃圾箱/上海2。脚本是wait-for正在执行一个exec“$@”,它在容器中不起作用。将其替换为“$@”,在等待应用程序后调用命令。因此,问题的实际解决方案是创建run.sh
#/bin/sh/script/wait-for-app:8080-t15--/opt/testcafe/docker/testcafe-docker.sh'chromium--no sandbox'e2e
,并将等待脚本中的exec“$@”替换为“$@”