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指令:
- 执行构建命令:
Get-Content Dockerfile | docker build --build-context src=. -
- 修改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
相关产品推荐
相关产品推荐

