我的目录结构:
├── 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
请注意,这还将删除容器中未使用的所有图像。