对于嵌套的忽略文件,

我的目录结构:

├── 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环境中重现,在该环境中,我通过映像gcr.io/cloud-builders/docker使用docker cli,该映像使用docker客户端版本19.03.5,并与docker服务器版本{{1}一起运行},API版本18.09.3

maobo_study 回答:对于嵌套的忽略文件,

免责声明:我不是 Node.js 开发人员

运行 npm install 会将所需的 Node 模块临时下载到 .staging 文件夹中,以便安装。正如我从您的帖子中了解到的,node_modules 被忽略,包括其子文件夹。这意味着无法再访问 .staging 文件夹。

您可能需要注意的另一个问题(来自官方 Docker 文档):

不要使用您的根目录作为构建上下文的 PATH, 因为它会导致构建传输硬盘的全部内容 前往 Docker 守护进程。

这可能会导致构建冲突

本文链接:https://www.f2er.com/2686420.html

大家都在问