如何避免在WITH DOCKER块的容器中安装jq与Docker工具?
解决Earthly
WITH DOCKER 自动安装无用工具的问题 最直接的解决方案:设置EARTHLY_DOCKER_NO_INSTALL环境变量
Earthly本身提供了跳过这些工具安装的开关,你只需要在执行Earthly构建命令时加上这个环境变量:
EARTHLY_DOCKER_NO_INSTALL=true earthly +your-test-target
或者在你的CI配置(比如GitHub Actions、GitLab CI)里,把这个变量注入到Earthly的运行环境中即可。
这个变量会告诉Earthly:不需要在WITH DOCKER块内检查或安装docker、docker-compose、jq这些依赖工具,直接跳过整个安装流程。
替代优化方案:复用基础镜像缓存(你的临时方案的升级)
如果因为CI环境限制没法用上述环境变量,你可以把这些工具提前打包到基础镜像里,利用Earthly的缓存机制避免重复安装:
FROM bellsoft/liberica-openjdk-alpine:17 AS base # 仅为满足Earthly的检查要求安装,实际你不用这些工具 RUN apk add --no-cache docker-cli docker-compose jq # 后续测试阶段使用这个预构建的基础镜像 FROM base AS integration-test WITH DOCKER # 启动测试用数据库 RUN docker run -d --name test-db -e MYSQL_ROOT_PASSWORD=test mysql:8.0 # 等待数据库就绪 RUN until docker exec test-db mysqladmin ping -h localhost --silent; do sleep 1; done # 执行集成测试 RUN ./mvnw verify -DskipUnitTests END
这种方式只会在第一次构建时安装这些工具,后续构建直接复用缓存层,不会再重复执行安装步骤。
补充说明
Earthly默认安装这些工具是为了兼容需要在WITH DOCKER块内手动执行docker命令的场景,但如果你的集成测试只依赖启动好的数据库服务,完全不需要在块内操作docker,那么EARTHLY_DOCKER_NO_INSTALL=true是最省心的方案,根本不需要额外安装任何无用工具。
内容的提问来源于stack exchange,提问作者Kirill
相关产品推荐
相关产品推荐

