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

Dockerfile无法将主机文件复制到容器的问题求助

解决Docker构建时"failed to compute cache key"文件找不到的问题

错误含义

failed to compute cache key 是Docker构建时的常见错误,本质是Docker在构建上下文中找不到你COPY指令指定的文件,无法生成用于缓存构建层的唯一标识(缓存键)。缓存键依赖于源文件的路径、内容等信息,找不到文件自然无法生成。

问题根源

你执行的构建命令 Get-Content Dockerfile | docker build - 是通过管道将Dockerfile的内容直接传给Docker daemon,这种方式下构建上下文是空的——Docker没有被指定包含那些.conf配置文件的目录,所以它找不到与Dockerfile同级的php-fpm.conf、nginx.conf等文件。

解决方法

方法1:使用标准构建命令(推荐)

直接在Docker/目录下执行标准的docker build命令,指定当前目录为构建上下文(Docker默认会在上下文根目录找Dockerfile):

docker build .

如果你的Dockerfile不是默认名称,才需要用-f参数指定路径:

docker build -f Dockerfile .

方法2:管道传递Dockerfile时指定构建上下文(Docker 23.0+支持)

如果必须用管道传递Dockerfile内容,需要显式指定构建上下文目录(即包含配置文件的Docker/目录),同时调整Dockerfile中的COPY指令:

  1. 执行构建命令:
Get-Content Dockerfile | docker build --build-context src=. -
  1. 修改Dockerfile中的COPY指令,加上上下文别名src::
COPY src:php-fpm.conf /etc/php8/
COPY src:nginx.conf /etc/nginx/
COPY src:default.conf /etc/nginx/http.d/
COPY src:www.conf /etc/php8/php-fpm.d/

补充说明

Docker的构建上下文是一个目录,所有COPY/ADD指令中引用的源文件都必须在这个目录(或其子目录)内,Docker无法访问上下文之外的文件。标准构建命令中指定的.就是把当前目录设为上下文,这样Docker就能找到同级的所有配置文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:54:11