对于嵌套的忽略文件,Docker 构建有时会在"file not found or excluded by .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 找到或排除。

根据我的理解(请参阅为什么 Node 模块进入 .staging 文件夹?(.staging文件夹是临时的,在遍历它时可能存在竞争条件(请参阅 Docker cli 源代码(。

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

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

清理您的系统。

docker system prune -a

请注意,这还将删除容器中未使用的所有图像。

最新更新