.dockerignore文件通过过滤构建上下文(如node_modules、.git、.env、*.log等),减少传输体积、加速构建、防止敏感信息泄露,其作用类似.gitignore,但控制的是上传至Docker守护进程的文件集合。

控制 Docker 镜像构建上下文,核心是减少传输体积、加快构建速度、防止敏感信息泄露。关键不在“传什么”,而在“不传什么”——靠 .dockerignore 文件精准过滤,再配合合理的构建路径和结构设计。
用 .dockerignore 排除无关文件
这个文件作用类似 .gitignore,但影响的是构建时上传到守护进程的文件集合。Docker 默认把整个上下文目录打包发送,哪怕你只用其中 1 个文件。
- 常见要忽略的项包括:
node_modules、dist、build、.git、.env、*.log、README.md - 注意:空行和以
#开头的行会被忽略;路径匹配基于上下文根目录,不是项目根目录 - 如果
.dockerignore里写了src/,而你在 Dockerfile 中用了COPY src/app.js /app/,那这一步会失败——因为根本没传过去
指定最小化构建路径
别直接在项目根目录执行 docker build .,尤其当项目含大量文档、测试数据或历史分支时。
- 新建一个干净子目录(比如
docker-build/),只放 Dockerfile 和真正需要的文件(如源码、配置、静态资源) - 运行
docker build -f docker-build/Dockerfile docker-build/ - 避免用
/或用户主目录作为上下文路径,否则可能意外上传整个硬盘内容
利用多阶段构建隔离构建环境
上下文控制不止于“传哪些文件”,还涉及“在哪构建、用什么环境”。多阶段构建能天然缩小最终镜像所依赖的上下文范围。
- 第一阶段用完整开发镜像(如
golang:1.21)编译代码,生成二进制或静态资源 - 第二阶段用极简运行镜像(如
alpine:latest),只COPY --from=0拿走产物,不带任何构建工具或源码 - 这样即使上下文里混进了调试脚本或临时文件,也不会出现在最终镜像里
检查实际上传内容
Docker 客户端会在构建开始时打印 Sending build context to Docker daemon,后面跟着大小。这是最直接的验证方式。
- 如果显示 “Sending build context to Docker daemon 1.2GB”,说明上下文太大,得立刻排查
- 可以临时加一句
RUN find / -type f -size +10M 2>/dev/null | head -10到 Dockerfile 末尾,看镜像里是否混入了不该有的大文件 - 用
docker build --no-cache --progress=plain .查看详细日志,确认哪些路径被实际读取


















