构建上下文与忽略文件
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 体积异常大;排查路径是上下文体积→镜像内不该有的文件→核对忽略规则。