非多阶段Docker构建中如何正确引入Jenkins构建的Maven JAR包
解决Docker COPY JAR包路径错误的问题
核心问题:Docker COPY的路径规则
Docker的COPY命令只能访问构建上下文(build context)范围内的文件,不能直接引用宿主机的绝对路径,也不能用带开头/的路径(除非是容器内的目标路径)。你之前的错误都是因为违反了这个规则。
方案1:直接使用Jenkins构建好的JAR包(无需移动文件)
- 指定正确的构建上下文:
在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/ - 修改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
相关产品推荐
相关产品推荐

