跳到主要内容

Docker Compose 速查表 — 多容器编排

Docker Compose 允许你通过一个 YAML 文件定义和运行多容器的 Docker 应用程序。本速查表涵盖 Compose 文件格式、CLI 命令、网络配置、卷挂载、环境变量、健康检查以及生产环境实践。

更新: 2026-07-15·20 条命令

快速参考

场景命令
启动所有服务(前台)docker compose up
启动所有服务(后台)docker compose up -d
停止并移除所有容器docker compose down
查看服务日志docker compose logs -f
列出服务状态docker compose ps
构建或重建镜像docker compose build
执行容器内命令docker compose exec
查看服务实时指标docker compose top
拉取所有服务镜像docker compose pull
重启所有服务docker compose restart

docker-compose.yml 核心配置

### 基础结构

``yaml version: "3.9" # 推荐使用 3.8+,V2 可不指定版本

services: web: image: nginx:alpine ports: - "80:80" volumes: - ./html:/usr/share/nginx/html networks: - frontend

api: build: ./api ports: - "3000:3000" environment: - DB_HOST=db - DB_PORT=5432 depends_on: - db networks: - frontend - backend

db: image: postgres:15-alpine volumes: - pgdata:/var/lib/postgresql/data environment: POSTGRES_DB: myapp POSTGRES_USER: user POSTGRES_PASSWORD: secret networks: - backend

volumes: pgdata:

networks: frontend: backend: `

### 构建配置(build)

`yaml services: app: build: context: ./app # Dockerfile 所在目录 dockerfile: Dockerfile.prod # 指定 Dockerfile 文件名 args: # 构建参数(仅构建时可用) NODE_ENV: production target: prod # 多阶段构建的目标阶段 `

### 端口映射

`yaml services: web: ports: - "80:80" # 主机端口:容器端口 - "443:443/tcp" # 指定协议(tcp/udp) - "3000-3005:3000-3005" # 端口范围 - "8080:80" # 自定义主机端口 `

### 环境变量

`yaml services: app: # 方式一:直接指定 environment: - NODE_ENV=production - DEBUG=false - DB_HOST=localhost

# 方式二:从 .env 文件加载 env_file: - ./app/.env - ./app/.env.production # 可指定多个文件,后面覆盖前面

# 方式三:引用宿主机环境变量 environment: - HOSTNAME # 不加 = 值,直接取宿主机同名变量 - SECRET_KEY=${SECRET_KEY:-default_value} # 带默认值 `

### 卷挂载

`yaml services: app: volumes: # 命名卷(推荐用于持久化数据) - data:/var/lib/data

# 绑定挂载(开发时热重载) - ./src:/app/src

# 只读挂载 - ./config:/app/config:ro

# 匿名卷 - /var/lib/logs

# 宿主机上的绝对路径 - /home/user/data:/data

volumes: data: # 命名卷声明 driver: local `

### 网络配置

`yaml services: web: networks: - frontend - backend

db: networks: - backend aliases: # 网络别名(同一网络内的其他服务可通过别名访问) - database

networks: frontend: driver: bridge # bridge(默认)、host、overlay、none backend: driver: bridge ipam: # 自定义 IP 地址池 config: - subnet: 172.20.0.0/24 `

### 依赖与启动顺序

`yaml services: app: depends_on: - db - redis

db: image: postgres:15

redis: image: redis:7-alpine `

`yaml # V2 完整版 — 等待服务健康就绪 services: app: depends_on: db: condition: service_healthy redis: condition: service_started

db: image: postgres:15 healthcheck: test: ["CMD-SHELL", "pg_isready -U user -d mydb"] interval: 5s timeout: 5s retries: 5 start_period: 10s

redis: image: redis:7-alpine `

### 健康检查

`yaml services: api: image: myapp:latest healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] interval: 30s # 每 30 秒检查一次 timeout: 10s # 单次检查超时时间 retries: 3 # 连续失败 3 次标记为 unhealthy start_period: 40s # 容器启动后等待 40s 才开始检查 `

常用 CLI 命令详解

### 启动与管理

`bash # 前台启动(终端附着,Ctrl+C 停止) docker compose up

# 后台启动 docker compose up -d

# 启动指定服务 docker compose up -d web api

# 停止所有服务(不删除容器) docker compose stop

# 停止指定服务 docker compose stop db

# 启动已存在的停止容器 docker compose start

# 重启所有服务 docker compose restart

# 停止并删除容器 + 网络(默认保留卷) docker compose down

# 停止并删除所有(含卷、镜像) docker compose down -v --rmi all `

### 查看信息

`bash # 查看服务状态 docker compose ps

# 查看实时日志 docker compose logs -f

# 查看指定服务日志(最后 50 行) docker compose logs --tail=50 -f api

# 查看服务进程 docker compose top

# 列出镜像 docker compose images `

### 构建与镜像

`bash # 构建或重建所有镜像 docker compose build

# 强制重新构建(不使用缓存) docker compose build --no-cache

# 构建指定服务 docker compose build web

# 拉取服务镜像 docker compose pull

# 推送服务镜像到仓库 docker compose push `

### 调试与执行

`bash # 在运行中的容器执行命令 docker compose exec web ls -la /app

# 交互式进入容器 docker compose exec -it web bash

# 在新容器中运行一次性命令 docker compose run --rm api npm test

# 指定端口映射运行一次性命令 docker compose run -p 3000:3000 web npm start `

### 扩展与缩放

`bash # 将 web 服务扩展到 3 个实例 docker compose up -d --scale web=3

# 限制单个服务使用的资源 docker compose up -d --scale web=2 --scale worker=5 `

高级配置模式

### 资源限制

`yaml services: app: deploy: resources: limits: cpus: "0.5" # 限制使用半个 CPU memory: 512M # 限制最大内存 512MB reservations: cpus: "0.25" memory: 256M `

### 日志配置

`yaml services: app: logging: driver: "json-file" # json-file(默认)、syslog、fluentd、awslogs、gelf options: max-size: "10m" # 单个日志文件最大 10MB max-file: "3" # 最多保留 3 个日志文件 `

### 重启策略

`yaml services: app: restart: unless-stopped # 可选值: # no — 从不重启(默认) # always — 总是重启 # on-failure — 退出码非 0 时重启 # unless-stopped — 除非手动停止,否则总是重启 `

### 配置文件注入

`yaml services: app: configs: # Swarm 模式下可用 - source: app_config target: /etc/app/config.yml uid: "1000" gid: "1000" mode: 0440

configs: app_config: file: ./config.yml `

### secrets 管理

`yaml services: app: secrets: - db_password - api_key

secrets: db_password: file: ./secrets/db_password.txt api_key: environment: "API_KEY" # 从环境变量读取 `

多环境配置(多 Compose 文件)

`bash # 基础配置 + 覆盖配置 docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

# 合并多个文件(后面覆盖前面) docker compose \ -f docker-compose.yml \ -f docker-compose.override.yml \ -f docker-compose.prod.yml \ up -d `

示例覆盖文件 docker-compose.prod.yml

`yaml services: web: ports: - "80:80" restart: always environment: - NODE_ENV=production

db: deploy: resources: limits: memory: 1G `

生产环境最佳实践

实践说明
固定镜像版本使用具体版本标签(如 postgres:15.4)而不是 latest
使用 .env 文件将敏感信息和环境差异放到 .env 文件,不提交到 Git
设置重启策略生产服务使用 restart: unless-stoppedrestart: always
配置健康检查为每个关键服务配置 healthcheck,配合 depends_on 条件等待
限制资源使用为每个服务设置 CPU 和内存限制,防止资源争抢
使用命名卷持久化数据使用命名卷,避免使用绑定挂载的生产风险
分离 Compose 文件基础配置 + 环境覆盖(dev/staging/prod)多文件组合
日志管理配置日志轮转(max-size / max-file),防止磁盘写满
安全扫描使用 docker scout` 扫描镜像漏洞

Compose 编排(20)

命令难度
docker compose up
启动所有服务
基础
docker compose down
停止并移除所有服务
基础
docker compose logs
查看服务日志
基础
docker compose ps
列出所有服务容器
基础
docker compose build
构建或重新构建服务镜像
中级
docker compose exec
在运行中的容器内执行命令
中级
docker compose restart
重启所有服务
基础
docker compose pull
拉取服务镜像
基础
docker compose push
推送服务镜像到仓库
中级
docker compose run
运行一次性命令
中级
docker compose stop
停止所有服务而不移除容器
基础
docker compose rm
移除已停止的服务容器
中级
docker compose top
显示正在运行的进程
中级
docker compose config
验证并查看 Compose 配置
中级
docker compose images
列出服务使用的镜像
基础
docker compose create
创建服务容器但不启动
中级
docker compose events
监控容器的实时事件
高级
docker compose kill
强制终止服务容器
中级
docker compose port
查看服务容器的公共端口映射
中级
docker compose version
显示 Docker Compose 版本信息
基础

常见问题

本速查表数据整理自各工具官方文档。最后更新: 2026-07-15。