首页 > 解决方案 > 对于嵌套的忽略文件,Docker 构建有时会因“.dockerignore 找不到或排除的文件”而失败

问题描述

我的目录结构:

├── src/
├───── backend/
├─────── Dockerfile
├─────── ...
├───── frontend/
├─────── Dockerfile
├─────── node_modules/
├─────── ...
├───── commons/
├─────── ...
├── .dockerignore

.dockerignore包括该行**/node_modules,并且我的构建上下文是根目录,因为使用了commons.

我两个都跑

docker build ... -f src/backend/Dockerfile .

docker build ... -f src/frontend/Dockerfile .

并行,有时backend构建会因以下特定错误而失败:

错误检查上下文:'文件('/workspace/src/frontend/node_modules/.staging/wrap-ansi-2a6f888f')未找到或被 .dockerignore 排除。

根据我的理解(请参阅Why do Node modules go into .staging folder?)该.staging文件夹是临时的,并且在遍历它时可能存在竞争条件(请参阅 Docker cli source)。

node_modules但是,如果忽略此文件,为什么首先会遍历该文件?我是在滥用忽略上下文功能还是实际的竞争条件?

该问题在 Google Cloud Build 环境中重现,我通过图像使用 docker cli,该图像gcr.io/cloud-builders/docker使用 docker 客户端版本19.03.5并使用 docker server version 18.09.3、 API version运行1.39

标签: dockerdockerfilenode-modulesdocker-build

解决方案


推荐阅读