Docker Desktop升级后COPY/ADD构建失败,原有配置失效求解决
问题分析与解决
第一个报错(找不到app/apache路径)
你的报错信息提到找不到/var/lib/docker/tmp/.../app/apache,但你提供的目录结构和COPY命令里并没有涉及app/apache目录,说明你的app.dockerfile中存在其他引用app/apache路径的COPY/ADD命令。
Docker 25.x版本默认启用的BuildKit构建引擎,会严格检查所有COPY/ADD命令的源路径是否存在,哪怕这些命令处于条件分支中(旧版本可能不会提前检查)。解决方式:
- 打开
app.dockerfile,查找所有包含app/apache的COPY/ADD语句:- 如果该目录是冗余配置,直接删除对应的命令;
- 如果确实需要该目录,在
backend/docker/app下创建apache目录,或者修正路径指向实际存在的位置。
第二个报错(changes out of order)
你执行COPY app/app.ini时缺少目标路径,这是不符合Dockerfile语法规范的。旧版本Docker可能允许省略目标(默认复制到当前工作目录),但BuildKit对语法的校验更严格,必须明确指定目标位置:
- 正确写法示例:
# 复制到指定目录 COPY app/app.ini /usr/local/etc/php/conf.d/ # 或者复制到当前工作目录(注意末尾的点) COPY app/app.ini .
额外注意事项
- 构建上下文确认:你的docker-compose.yml中指定
context: docker,意味着构建上下文是backend/docker目录,所有COPY/ADD的源路径都要相对于这个目录。你原来的COPY app/php/app.ini /usr/local/etc/php/conf.d/路径是正确的(对应backend/docker/app/php/app.ini),只要没有其他错误命令,这个语句本身不会导致报错。 - 清理构建缓存:升级Docker后可能残留旧的构建缓存,执行
docker builder prune清理缓存后再重新构建,避免缓存干扰。
内容的提问来源于stack exchange,提问作者PatricNox
相关产品推荐
相关产品推荐

