首页/云/Docker 容器速查/构建上下文与传输
镜像与构建107 条

构建上下文与传输

docker build 最后的路径就是构建上下文:目录内容(除 .dockerignore 排除项)会打包发送给构建器,COPY/ADD 只能引用其中文件。

Docker 容器速查云更新于 2026-10-13

构建上下文是什么

docker build 最后那个路径就是构建上下文:目录内容(除去 .dockerignore 排除的)会打包发送给构建器,COPY 与 ADD 只能引用其中的文件。上下文过大是构建变慢与敏感文件进镜像最常见的根源。

基本信息

用途提供构建时需要的文件来源
语法docker build [选项] 上下文路径,可以是目录、URL 或标准输入
体积控制用 .dockerignore 排除数据、日志、依赖与产物目录
硬限制上下文之外的文件无法被 COPY
缓存影响上下文内容参与层缓存计算

典型使用场景

  • 新项目先配好忽略规则,避免把依赖目录与构建产物打进上下文
  • 排查构建启动很慢:先看上下文体积,再看依赖安装耗时
  • 排查镜像里有不该出现的文件:确认是不是上下文一起带进去了
  • 用标准输入或归档流做临时构建,避免生成中间目录
  • CI 里把上下文限定为仓库中明确的子目录,构建更快更可预测
  • 排查文件明明存在却报找不到:确认它在不在上下文内或被忽略规则排除

示例

示例
du -sh .                          # 先看上下文有多大
docker build -t app/web:1.0 .       # 以当前目录作为上下文
docker build -t app/web:1.0 ./api   # 以子目录作为上下文
tar czf - app | docker build -t app/web:1.0 -   # 用归档流作为上下文

与上下文相关的常见问题

现象原因处理
构建刚开始就很慢上下文体积大,传输耗时先加 .dockerignore 排除无关目录
镜像里出现敏感文件上下文包含 .env 或密钥文件写进忽略规则并从上下文移出
COPY 报找不到文件文件在上下文之外或被忽略调整上下文位置或忽略规则
构建结果不可复现上下文里含本地生成物忽略产物目录,只保留源码
上下文按目录树打包,指向外部的软链接不会被跟随复制;需要外部文件时应当把它放进上下文,或用其他方式提供。
忽略规则只影响打包上传的内容,不修改宿主机上的文件;改动之后要重新构建才会生效。
上下文内容参与层缓存计算:把日志、数据集这类频繁变化的目录排除掉,能减少大量无意义的缓存失效。

易错点

  • 没有 .dockerignore 就用 COPY 复制整个目录,日志、数据集、环境文件一起进镜像,体积与安全双输
  • 在仓库根目录构建却只需要子目录内容,上下文无谓变大,构建时间被明显拉长
  • 以为忽略规则能删掉已经 COPY 进镜像的文件:它只控制上传,不会修改已有的层
  • 把上下文写成宿主根目录或家目录,无关文件被打包进构建器,既慢又有泄露风险

数据来源与参考

  • Docker 官方文档:docker build / build context(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌