You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:45:03