我正在尝试构建一个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之前,还尝试在入口点或命令中使用脚本https://github.com/Eficode/wait-for。在命令中似乎与entrypoint命令发生冲突,在入口点上使用它时,我让testcafe等待,但未运行测试以“操作超时”结束
entrypoint: ['/script/wait-for', 'app:8080 -- "/opt/testcafe/docker/testcafe-docker.sh chromium --no-sandbox e2e"']
(似乎wait-for的所有参数都必须在数组的同一条目内,才能用作入口点脚本)
这是我的docker-compose文件
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"]
似乎我已经很接近用等待解决问题了,但是某种程度上我的入口点语法不正确
答案 0 :(得分:3)
您可以更简单地做到这一点:
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