docker - 对于嵌套的忽略文件,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
。
解决方案
推荐阅读
- php - 我无法访问我的数组 php 的特定索引
- azure - VS2019 Azure服务认证账号选择本地调试
- c++ - 为单个值解析未知格式的 JSON 响应
- awk - 将目录中的文件路径和文件名打印到 CSV
- asp.net-mvc - Asp.Net MVC 中的动态表单生成器
- php - 如何将 SQL 查询转换为 Laravel Eloquent?
- python - 如何修复分数值的打印?
- php - Slim 返回响应,状态为 400 并重定向
- c++ - 在 MPI 中,RAM 是如何在进程之间分配的?
- google-app-engine - GCP App Engine 中不同项目 ID 的实例/数据存储是如何混合的?