如何让Dockerfile的COPY命令支持Windows系统绝对路径?
如何让Dockerfile中的COPY命令在Windows系统下使用绝对路径正常运行
问题原因
你遇到的报错完全符合Docker的设计规则:执行docker build时你指定的构建上下文为当前目录(命令末尾的.),Docker只会将当前目录及其子目录的内容发送给守护进程,所有COPY指令的源路径只能使用这个上下文范围内的文件,上下文外的绝对路径、上层相对路径都会被判定为不存在。
你尝试的三种Windows路径写法不管怎么调整格式,只要目标路径不在构建上下文范围内,都会触发找不到文件的报错。
可行解决方案
- 方案1(最推荐):将需要复制的
.m2目录移动到当前构建目录下,修改Dockerfile的COPY指令为:
再执行原构建命令即可正常构建。如果不想物理移动文件,也可以在当前构建目录下创建软链接指向本地COPY ./.m2 /root/.m2.m2目录,效果一致。 - 方案2(不推荐):调整构建上下文范围为C盘根目录,执行构建命令时指定Dockerfile路径:
该方案会将整个C盘内容传输给Docker守护进程,构建速度极慢,且有意外泄露敏感文件的风险,仅作原理演示不建议实际使用。docker build -t custom-maven-image -f ./Dockerfile C:/ - 方案3(更适用于maven缓存场景):如果你的需求是复用本地maven仓库的依赖缓存,不需要将缓存打包到镜像内,可以不用修改Dockerfile,在运行容器时直接挂载本地目录即可:
该方案不会增大镜像体积,本地仓库更新后容器内可以直接复用,灵活性更高。docker run -v C:/Users/myuser/.m2:/root/.m2 custom-maven-image
内容的提问来源于stack exchange,提问作者makozaki
相关产品推荐
相关产品推荐

