
Incorrect build context for build-api
快速结论:该错误发生在通过 make build-api 构建 Dify API Docker 镜像时。api/Dockerfile 已更新为以仓库根目录为构建上下文,但 Makefile 中的 build-api 目标仍将 ./api 作为上下文传递,导致 COPY 命令找不到文件。优先排查 Makefile 中的构建上下文路径。
问题场景
用户在 Dify 自托管(Source 方式)环境下,使用 make build-api 命令从仓库根目录构建 Docker 镜像时触发。
报错原文
Building API Docker image: ghcr.io/quantumghost/dify:main...
docker build -t ghcr.io/quantumghost/dify:main ./api
...
=> ERROR [packages 2/6] COPY api/pyproject.toml api/uv.lock ./
=> ERROR [packages 3/6] COPY api/providers ./providers
...
原因分析
这是一个已确认的 bug。提交 8f197c5a0a(2026-05-20)更新了 api/Dockerfile,使其 COPY 命令引用了 api/ 和 dify-agent/ 为前缀的路径,因此期望构建上下文为仓库根目录。然而,Makefile 中的 build-api 目标仍然传递 ./api 作为构建上下文,导致 Docker 无法正确解析 COPY api/pyproject.toml api/uv.lock ./ 等指令。
环境排查
- Dify 版本:main 分支
- Docker CLI(确认
docker build命令可用) - Makefile:检查
build-api目标中docker build的上下文路径 api/Dockerfile是否已包含最新更改(参考d315ae3b809b196e2bef66a0e0db44dbc716c91f)
解决步骤
- 修复 Makefile(推荐):将
Makefile中build-api目标的docker build命令改为显式指定 Dockerfile 并使用仓库根目录为上下文:docker build -f api/Dockerfile -t $(API_IMAGE):$(VERSION) .此模式与
build-web目标一致。 - 临时工作区:若不修改 Makefile,可直接从仓库根目录手动执行以下命令构建:
docker build -f api/Dockerfile -t ghcr.io/quantumghost/dify:main .
验证方法
再次执行 make build-api -e API_IMAGE=your-registry/dify -e VERSION=your-version 或手动构建命令,观察 Docker 构建过程是否成功完成且无 ERROR [packages 2/6] 或 ERROR [packages 3/6] 错误。


![[Bug]: Sync recursive retrieval misses `ref_doc_id` in dedup key](https://www.chat-gpts.plus/wp-content/uploads/2026/06/21033-2bfb3103-768x403.jpg)
![[Claude] [开源] CCL:我做了一个 Claude Code 启动器,把 ccswitch 干掉了](https://www.chat-gpts.plus/wp-content/uploads/2026/06/ai_cover_3-595-768x403.jpg)