.dockerignore 是什么
它放在构建上下文根目录,按类似 .gitignore 的语法排除文件,作用有两个:缩小发送给构建器的上下文体积以加快构建,以及防止环境文件、密钥与本地依赖目录混进镜像层。它只影响构建上下文,不影响运行中的容器。
基本信息
| 位置 | 与 Dockerfile 同目录,作用于整个构建上下文 |
|---|---|
| 语法 | glob 通配、! 反选、# 注释,行为与 .gitignore 接近 |
| 常见排除 | 依赖目录、.git、构建产物、日志、环境文件与本地缓存 |
| 收益 | 上下文更小构建更快,敏感文件不进入镜像层 |
| 注意 | 被排除的文件 COPY 不到,会直接报文件不存在 |
| 生效范围 | 只作用于构建上下文,运行时挂载不受影响 |
建议排除清单
| 类别 | 示例 | 原因 |
|---|---|---|
| 依赖目录 | node_modules、vendor | 本地版本与平台可能不匹配 |
| 版本控制 | .git | 体积大且会泄露提交历史 |
| 构建产物 | dist、build | 容器内应重新构建产物 |
| 环境与密钥 | .env、证书与私钥文件 | 防止密钥进入镜像层 |
| 日志与缓存 | *.log、本地缓存目录 | 无意义且拖慢构建 |
示例
示例
node_modules
.git
dist
*.log
.env*
!.env.example典型使用场景
- 缩小上下文体积,明显缩短每次构建的传输与复制时间
- 避免把本地环境文件与密钥打进镜像
- 排除本地依赖目录,改在镜像内安装以保证一致性
- 排除构建产物,确保产物由镜像内构建流程生成
被排除的文件 COPY 不到,会报文件不存在;出现这类报错先核对排除规则,再怀疑构建上下文路径选错。
反选语法要生效,前提是父目录没有被整体排除:先排除整个目录,再用反选单独放回某个文件,通常不会按预期生效。
即便把 .dockerignore 与 Dockerfile 写进排除列表,构建器仍会读取它们来完成构建,指望用排除规则隐藏这两个文件没有意义。