Docker .dockerignore 完全指南

.dockerignore就是构建时的.gitignore,不加的话COPY . .会把垃圾全带进去。

基本格式

# 注释
node_modules
.git
.gitignore
.env
.env.local
*.md
README.md

# 忽略根目录的temp
/temp

# 忽略所有temp目录
**/temp

# 忽略temp开头的文件和目录
temp*

# 只忽略src下的test
src/*/*/test

为什么要写.dockerignore

  1. 构建上下文小:docker build先把整个目录发给daemon,文件越多越慢
  2. 镜像干净:不该进镜像的东西不进
  3. 缓存友好:少了无关文件变化,缓存命中的概率更高
  4. 安全:.env文件不进镜像

各语言模板

Node.js
node_modules
npm-debug.log
.git
.env
.env.*
coverage
test
.vscode
Dockerfile
docker-compose*.yml
*.md
README.md
Python
__pycache__
*.pyc
*.pyo
.git
.env
.venv
venv
.pytest_cache
.mypy_cache
*.egg-info
dist
build
Java
.git
target/
*.class
*.jar
*.war
.idea/
*.iml
.gradle/
build/
Go
.git
*.exe
*.test
vendor/
.idea/

常见坑

  1. .dockerignore必须在构建上下文根目录,跟Dockerfile同级
  2. .dockerignore先匹配再排除,顺序影响结果
  3. 修改.dockerignore不会触发缓存失效(它不是Dockerfile的一部分)
  4. 如果用了.dockerignore但还在COPY里写了排除的文件,文件不会被复制
  5. **/node_modules比node_modules更彻底(匹配任意深度)

---
每个项目都应该有.dockerignore,跟.gitignore一样是标配。不写就是在给镜像喂垃圾。

更多推荐