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

非多阶段Docker构建中如何正确引入Jenkins构建的Maven JAR包

解决Docker COPY JAR包路径错误的问题

核心问题:Docker COPY的路径规则

Docker的COPY命令只能访问构建上下文(build context)范围内的文件,不能直接引用宿主机的绝对路径,也不能用带开头/的路径(除非是容器内的目标路径)。你之前的错误都是因为违反了这个规则。


方案1:直接使用Jenkins构建好的JAR包(无需移动文件)

  1. 指定正确的构建上下文:
    在Jenkins流水线中执行docker build时,把构建上下文设为JAR包所在的父目录/home/app/,这样Docker就能访问到target子目录下的JAR。示例命令:
    # 如果Dockerfile在/home/app/目录下
    docker build -t your-image-name /home/app/
    # 如果Dockerfile在其他路径(比如/opt/docker/),需要用-f指定Dockerfile位置
    docker build -t your-image-name -f /opt/docker/Dockerfile /home/app/
    
  2. 修改Dockerfile中的COPY命令:
    因为构建上下文是/home/app/,所以源路径用相对上下文的路径即可:
    COPY target/myfile.jar /myfile.jar
    

方案2:将JAR包移到Dockerfile同目录后的正确写法

把JAR移到Dockerfile所在目录后,不要在COPY的源路径前加/,要用相对路径:

COPY myapp-0.0.1-SNAPSHOT.jar /myapp-docker.jar

然后执行docker build时,确保当前工作目录是Dockerfile所在的目录,或者明确指定上下文为该目录:

# 在Dockerfile所在目录执行
docker build -t your-image-name .
# 或者指定绝对路径作为上下文
docker build -t your-image-name /path/to/dockerfile-dir/

关键注意事项

  • 构建上下文是docker build命令最后一个参数指定的路径,所有COPY/ADD的源文件必须在这个路径(包括子目录)下,Docker无法访问上下文之外的文件。
  • 确保Jenkins执行docker build的用户对构建上下文路径下的文件有读取权限,避免因权限问题导致文件找不到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:45:49