首页/开发/CI/CD 与发布速查/构建上下文与 .dockerignore
构建与制品管理58 条

构建上下文与 .dockerignore

构建上下文会先传给 Build 守护进程:用 .dockerignore 排除 .git、node_modules、密钥与临时文件,减少传输与被误拷风险。

CI/CD 与发布速查开发更新于 2026-10-13

构建上下文与忽略文件

docker build 会先把上下文目录内容发给构建守护进程,.dockerignore 在发送前按匹配规则排除文件。作用有三:减小传输体积、加快构建、防止密钥与临时文件进入构建环境——即使不进最终镜像,敏感文件也已被传输并可能留在缓存。上下文范围由 docker build 传入的路径决定。

基本信息

作用减小上下文体积、加快构建、防止敏感文件进入构建环境
常见条目.git、node_modules、dist、*.key、.env、测试数据
注意docker build 的上下文路径决定默认范围,配合显式 COPY 双保险
写法匹配规则与 .gitignore 类似,支持 ! 反向例外
位置必须放在上下文根目录才生效

典型使用场景

  • 排除依赖与产物:node_modules、dist 在镜像内重建
  • 排除版本库元数据:.git 既占体积又含历史信息
  • 防密钥泄入:.env、*.pem、*.key 一律排除
  • 加速 CI 构建:上下文从数百 MB 降到几 MB
  • 避免测试数据被带上:大体积 fixtures 不进构建环境
  • 缓存敏感:忽略文件变更会让复制层缓存失效,重建时留意时长波动

.dockerignore

.dockerignore
.git            # 版本库元数据不进上下文
node_modules    # 依赖在镜像内重装
dist            # 构建产物现场生成
*.log
.env*
*.pem
*.key           # 密钥类一律排除
tests/fixtures

常见条目与目的

条目目的备注
*.key / *.pem密钥文件排除排除后按已暴露预案处理历史
.env*防配置泄入构建环境示例文件可保留 .env.example
node_modules镜像内重装依赖保证构造可复现
tests/fixtures大体积测试数据按需调整
上下文里有密钥文件时,即使没进最终镜像,也已被传输与缓存;先排除再构建,并检查历史缓存是否已带上敏感文件。
忘写时的信号:构建日志中 Sending build context 体积异常大;排查路径是上下文体积→镜像内不该有的文件→核对忽略规则。

易错点

  • 忽略文件写得太宽(如 *):COPY 时缺文件报错,用「排除+显式复制」核对
  • 只在后期加 dockerignore:历史缓存里可能已含敏感文件,重建并审计,必要时按泄露预案轮换相关凭据
  • 忽略文件放错位置:必须在上下文根目录,放子目录不生效
  • 反向例外顺序写错:! 规则受前后顺序影响,逐条验证匹配结果
  • 认为不进镜像就安全:文件已传输到构建端并可能留在缓存,按已暴露处理,必要时轮换相关凭据

数据来源与参考

  • Docker Docs《.dockerignore》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌