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

Dockerfile通配符COPY指令在GitLab流水线报错no source files were specified

问题原因

该问题是不同Docker构建引擎对COPY指令的通配符处理逻辑差异导致:

  • 你本地Docker默认开启了BuildKit构建引擎,COPY指令中的通配符*会主动到TEMP_BUILD_IMAGE的对应路径下做文件匹配,能正常识别到strangler-0.1-all.jar;
  • 你的GitLab runner使用的是旧版Legacy Docker构建引擎,不会跨构建阶段处理通配符,只会把$ARTIFACT_NAME变量展开成字面量strangler-*-all.jar,直接匹配对应名称的文件,自然找不到符合条件的jar包。
解决方法

以下三种方案均可,按优先级推荐:

  • 优先级最高:直接在TEMP_BUILD_IMAGE阶段将目标jar重命名为固定名称,完全规避通配符兼容性问题
    在Dockerfile的TEMP_BUILD_IMAGE阶段最后添加一行重命名指令:
    RUN mv $APP_HOME/build/libs/strangler-*-all.jar $APP_HOME/build/libs/app.jar
    
    再修改COPY指令和启动命令为固定名称:
    COPY --from=TEMP_BUILD_IMAGE $APP_HOME/build/libs/app.jar .
    ENTRYPOINT exec java -jar app.jar
    
  • 优先级次之:移除通配符的变量包裹,直接写在COPY路径中
    直接修改COPY行为:
    COPY --from=TEMP_BUILD_IMAGE $APP_HOME/build/libs/strangler-*-all.jar .
    
    旧版构建器可以直接识别路径内的通配符完成匹配。
  • 优先级最低:给GitLab流水线开启BuildKit支持
    在GitLab CI的变量配置中添加DOCKER_BUILDKIT=1,让流水线使用和本地一致的BuildKit引擎构建,规则对齐后即可正常运行。

内容的提问来源于stack exchange,提问作者Bruno Carneiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:27:03