Docker Compose v3.x 参数速查备忘录
适用:docker compose up(Compose V2)|文件版本 3.8
标记说明
✅ 开发常用 ⭐ 生产必配 ⚠️ 高危慎用 🧪 调试专用
一、服务基础配置(services: xxx 下)
| 参数 | 作用说明 | 开发环境建议 | 生产环境建议 |
|---|
image | 指定容器镜像名称与 tag | ✅ 必填,尽量固定 tag,不要用 latest | ⭐ 必填,严禁 latest,锁定具体版本 |
hostname | 容器内部操作系统主机名 | ✅ 设置,方便进入容器识别 | ✅ 设置,便于日志排查 |
container_name | 自定义容器名称 | ✅ 可使用 | ❌ 不推荐:无法横向 scale 扩容 |
restart | 容器重启策略 | on-failure | ⭐ unless-stopped(最优)可选:on-failure:5 |
healthcheck | 业务健康检测,识别卡死进程 | ✅ 简单配置 | ⭐ 强制配置,带上start_period |
command | 覆盖镜像 CMD 启动命令 | ✅ 经常用来调试启动参数 | ✅ 按需使用 |
entrypoint | 覆盖镜像 ENTRYPOINT 入口脚本 | 🧪 调试使用 | 谨慎修改,避免破坏镜像逻辑 |
build | 本地根据 Dockerfile 构建镜像 | ✅ 开发环境高频使用 | ❌ 生产尽量使用预构建镜像 |
二、资源限制(生产重点)
| 参数 | 作用说明 | 开发环境建议 | 生产环境建议 |
|---|
cpus | CPU 核心上限限制 | 可选,不强制 | ⭐ 必须配置,防止占满宿主机 CPU |
mem_limit | 最大内存限制 | 可选 | ⭐ 必须配置,避免 OOM 拖垮宿主机 |
mem_reservation | 内存软限制(预留) | 不配置 | ✅ 搭配 mem_limit 使用 |
ulimits | 修改文件句柄、进程数限制 | 可选 | ⭐ Web / 数据库类必须配置 nofile |
ulimits:
nofile:
soft: 65535
hard: 65535
三、环境变量配置
| 参数 | 作用说明 | 开发环境建议 | 生产环境建议 |
|---|
environment | 直接写入环境变量 | ✅ 常用 | ⚠️ 禁止存放密码密钥 |
env_file | 从外部文件加载环境变量 | ✅ 使用 | ⭐ 推荐,敏感信息单独文件,设置权限 600 |
四、存储挂载
| 参数 | 作用说明 | 开发环境建议 | 生产环境建议 |
|---|
volumes | 目录 / 数据卷挂载 | ✅ 开发绑定宿主机目录 | ✅ 持久化数据使用命名卷;配置文件只读挂载 |
tmpfs | 内存临时文件系统,重启丢失 | ✅ 调试 | ⭐ /tmp、/run 推荐使用,减少磁盘 IO |
read_only | 容器根文件系统只读 | ❌ 开发不方便 | ⭐ 强烈推荐,配合 tmpfs,安全加固 |
五、网络相关配置
| 参数 | 作用说明 | 开发环境建议 | 生产环境建议 |
|---|
ports | 宿主机 ↔ 容器端口映射 | ✅ 常用 | ✅ 按需映射;内部服务尽量不暴露端口 |
expose | 声明容器内部端口,不映射宿主机 | ✅ 内部服务使用 | ✅ 微服务内部通信推荐 |
extra_hosts | 容器内 /etc/hosts 自定义域名 | ✅ 配置host.docker.internal:host-gateway | ✅ 按需添加 |
dns | 自定义 DNS 服务器 | ✅ 223.5.5.5 | ✅ 指定内部 DNS 或公共 DNS |
network_mode | 切换网络模式 | 默认 bridge | ⚠️ 禁止 host 模式,破坏网络隔离 |
networks | 使用自定义桥接网络 | ✅ 统一自定义网络 | ⭐ 所有服务加入自定义网络,不要默认 bridge |
六、安全权限配置(生产加固核心)
| 参数 | 作用说明 | 开发环境建议 | 生产环境建议 |
|---|
user | 指定非 root 用户运行容器 | 可选 | ⭐ 强制配置,不以 root 运行 |
cap_drop | 移除 Linux 内核权限 | 可选 | ⭐ cap_drop: [ALL]最小权限原则 |
cap_add | 添加内核权限 | 尽量不用 | 仅必须时少量添加(如 NET_BIND_SERVICE) |
security_opt | 安全选项 | 可选 | ⭐ no-new-privileges:true 禁止提权 |
privileged | 特权模式 | 🧪 特殊调试 | ⚠️ 严禁开启 true,极高风险 |
sysctls | 修改容器内核参数 | 可选 | ✅ 高并发服务调优 tcp 参数 |
七、日志、标签、依赖
| 参数 | 作用说明 | 开发环境建议 | 生产环境建议 |
|---|
logging | 日志驱动与滚动策略 | 可选 | ⭐ 必配日志滚动,防止磁盘爆满 |
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
| depends_on | 服务启动顺序依赖 | ✅ 使用 | ✅ 使用;Compose V2 加上 condition: service_healthy |
| labels | 容器自定义标签 | 可选 | ✅ 添加环境、服务名标签,便于监控、清理 |
八、调试专用参数(仅开发)
| 参数 | 作用说明 | 开发环境建议 | 生产环境建议 |
|---|
tty: true | 分配伪终端 | 🧪 需要交互式容器开启 | ❌ 不需要关闭 |
stdin_open: true | 保持标准输入打开 | 🧪 配合 tty 使用 | ❌ 关闭 |
📋 模板快速复制
1)开发环境模板(docker-compose.dev.yml)
version: "3.8"
services:
app:
image: nginx:alpine
hostname: dev-web
container_name: dev-nginx
restart: on-failure
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
environment:
TZ: Asia/Shanghai
extra_hosts:
- "host.docker.internal:host-gateway"
healthcheck:
test: ["CMD", "wget", "--spider", "http://127.0.0.1"]
interval: 10s
timeout: 5s
retries: 2
tty: true
stdin_open: true
networks:
dev-net:
networks:
dev-net:
driver: bridge
2)生产环境标准模板(docker-compose.prod.yml)
version: "3.8"
services:
app:
image: nginx:1.25.3-alpine
hostname: prod-web
restart: unless-stopped
cpus: "0.4"
mem_limit: 256m
ulimits:
nofile:
soft: 65535
hard: 65535
ports:
- "8080:80"
expose:
- 80
env_file:
- .env.prod
tmpfs:
- /tmp
read_only: true
user: "1000:1000"
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
dns:
- 223.5.5.5
healthcheck:
test: ["CMD", "wget", "--spider", "http://127.0.0.1"]
interval: 10s
timeout: 5s
retries: 3
start_period: 15s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
labels:
env: production
service: nginx-web
networks:
prod-net:
networks:
prod-net:
driver: bridge