.dockerignore文件控制COPY忽略规则,其语法类似.gitignore,支持通配符和!取反;应配合精准COPY路径(如COPY package.json ./)与多阶段构建,避免冗余复制、提升缓存效率与镜像安全性。

COPY 指令本身不负责排除文件,真正起过滤作用的是 .dockerignore 文件——它在构建上下文上传前就筛掉不需要的路径,被忽略的文件根本不会到达 Docker 守护进程,自然也不会被 COPY 到镜像里。
把 .dockerignore 放对位置
必须放在 docker build 命令指定的构建上下文根目录(也就是你执行 docker build . 时那个 . 所在的文件夹)。路径全部是相对的,不支持绝对路径。
- 比如运行
docker build -f ./Dockerfile.prod ./src,那.dockerignore就得放在./src目录下 - 如果放错位置(比如放在项目根但构建从子目录启动),规则完全不生效
写好忽略规则,重点防大文件和敏感项
常见需排除的大文件或目录类型:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
-
node_modules/(Node.js 项目)或vendor/(PHP)、__pycache__/(Python)——这些应由 RUN 指令安装,不是复制来的 -
logs/、tmp/、dist/、build/—— 构建产物或运行时生成内容 -
*.log、*.zip、*.tar.gz、*.iso—— 防止意外打包大型二进制 -
.git、.env.local、secrets/—— 避免泄露元数据或密钥
注意:用 ! 可以白名单恢复个别文件,比如 !.gitignore 能确保只保留这个文件。
配合 COPY 的顺序,让缓存更稳
即使有 .dockerignore,COPY 的写法也影响缓存效率。推荐分步复制:
- 先 COPY 依赖描述文件(如
COPY package.json .),再 RUN 安装——这层缓存稳定 - 最后 COPY 源码(如
COPY src/ ./src/)——源码常变,放后面避免拖累前面的缓存 - 避免
COPY . .这种粗暴写法,哪怕有 .dockerignore,也容易因漏配规则引入冗余
验证是否生效的小技巧
加个临时 RUN 指令看看上下文里还剩啥:
- 在 Dockerfile 开头插入:
RUN ls -laR /workspace 2>/dev/null || echo "no workspace"(假设你 COPY 到 /workspace) - 或者构建时加
--progress=plain,观察 “Sending build context” 行显示的大小——明显变小说明 .dockerignore 起作用了

















