名称: docker-compose 描述: Docker Compose 容器编排和管理。管理多容器应用、服务、网络和卷。用于本地开发、测试和容器化应用的编排。 版本: 1.1 模型: sonnet 调用者: 两者 用户可调用: true 工具: [Bash, Read, Glob] 最佳实践:
- 优先使用 compose.yaml(规范 V2 名称)而非 docker-compose.yml
- 使用
docker compose(V2 插件),绝不使用docker-compose(V1 二进制文件) - 在操作前验证 compose.yaml 存在
- 使用项目名称进行隔离
- 在执行破坏性操作前检查服务状态
- 避免未经确认的卷移除
- 在重启失败服务前查看日志
- 在所有有状态服务上定义健康检查
- 使用配置文件处理环境特定服务
- 使用 watch + develop 块进行实时开发重载 错误处理: 优雅 流式传输: 支持 安全级别: 高 已验证: true 最后验证时间: 2026-02-19T06:00:00.000Z
Docker Compose 技能
安装
该技能调用 docker compose。最简单方法:安装 Docker Desktop(包含 Docker Engine + Compose):
- Windows: Docker Desktop for Windows(WSL 2 或 Hyper-V)
- Mac: Docker Desktop for Mac(Apple Silicon 或 Intel)
- Linux: Docker Desktop for Linux 或从 Docker 仓库安装 Docker Engine + Compose 插件
验证:docker compose version
速查表与最佳实践
命令: docker compose up -d / down;docker compose ps / logs -f <服务>;docker compose exec <服务> sh;docker compose build --no-cache;docker compose -f compose.prod.yaml config — 验证。
YAML: 为数据库使用命名卷(postgres_data:/var/lib/postgresql/data)。使用健康检查(healthcheck: 包含 test、interval、timeout、retries)。一个默认网络;通过名称引用服务(例如 http://api:3000)。使用 env_file 或 environment;将秘密保存在 secrets: 中。
技巧: -f compose.yaml -f override.yaml 合并文件(后者覆盖)。使用 --project-name 进行隔离。开发时优先使用 build: context: . dockerfile: Dockerfile;生产环境中固定镜像标签。在 up 前运行 docker compose config 以捕获错误。
认证与培训
Docker 认证助理(DCA): 编排 25%,镜像/注册表 20%,安装/配置 15%,网络 15%,安全 15%,存储 10%。免费资源:官方 DCA 学习指南,Coursera DCA 准备课程(可审核)。技能数据: Compose YAML(服务、卷、网络、健康检查),CLI(up/down/ps/logs/exec)。
钩子与工作流
建议钩子: 启动前:docker compose config(验证)。停止后:可选清理。当路由到 devops 或 devops-troubleshooter 时使用。
工作流: 与 devops(主要)、devops-troubleshooter(主要)一起使用。流程:验证 compose → 根据任务执行 up/down/exec。参见 operations/incident-response 进行容器调试。
概述
该技能提供全面的 Docker Compose 管理,使 AI 代理能够编排多容器应用、管理服务、检查日志和故障排除容器化环境,通过渐进式披露实现最佳上下文使用。
上下文节省: 约 92% 减少
- MCP 模式: 约 25,000 令牌始终加载(多个工具 + 模式)
- 技能模式: 约 700 令牌元数据 + 按需加载
何时使用
- 管理本地开发环境
- 编排多容器应用
- 调试服务连接性和网络
- 监控容器日志和健康状态
- 构建和更新服务镜像
- 测试容器化应用堆栈
- 故障排除服务失败
- 管理应用生命周期(启动、停止、重启)
要求
- Docker Engine 已安装并运行
- Docker Compose V2(
docker compose插件 — V1docker-compose已终止支持) - 项目中有效的
compose.yaml(首选)或compose.yml/docker-compose.yml - Docker 套接字访问的适当权限
快速参考
# 列出运行中的服务
docker compose ps
# 查看服务日志
docker compose logs <服务>
# 启动服务
docker compose up -d
# 停止服务
docker compose down
# 重建服务
docker compose build
# 在容器中执行命令
docker compose exec <服务> <命令>
# 实时开发重载(Compose Watch)
docker compose watch
# 使用配置文件启动
docker compose --profile debug up -d
# 验证合并配置
docker compose config
2026 年功能亮点
compose.yaml — 规范文件名
Docker Compose V2 优先使用 compose.yaml(和 compose.yml)而非旧的 docker-compose.yml。顶级字段 version: 已弃用,新文件中应完全省略。
# compose.yaml(首选 — 不需要 version: 字段)
services:
web:
build: .
ports:
- '8080:80'
db:
image: postgres:16-alpine
environment:
POSTGRES_PASSWORD: example
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Compose Watch — 实时开发重载
Compose Watch(自 Compose 2.22+ 起正式发布)取代了开发期间的手动重建-重启循环。为每个服务配置 develop.watch 块。提供三种操作:
| 操作 | 行为 |
|---|---|
sync |
即时将更改文件复制到运行中的容器 |
rebuild |
触发 docker compose build + 重新创建容器 |
sync+restart |
同步文件然后重启容器进程(无需完全重建) |
services:
api:
build: .
ports:
- '3000:3000'
develop:
watch:
# 即时同步源 — 无需为解释型代码重建
- action: sync
path: ./src
target: /app/src
ignore:
- node_modules/
# 当依赖清单更改时重建
- action: rebuild
path: package.json
# 仅当配置更改时重启
- action: sync+restart
path: ./config
target: /app/config
启动方式:
# 观察模式(输出保持在前台)
docker compose watch
# 或与 up 结合
docker compose up --watch
每种操作的使用时机:
sync— 解释型语言(Node.js、Python、Ruby),运行时能获取更改sync+restart— 配置或模板文件,需要进程重启但无需完全重建rebuild— 依赖清单更改(package.json、requirements.txt、go.mod)
配置文件 — 环境特定服务
配置文件允许单个 compose.yaml 服务多个环境。没有配置文件的服务始终启动。有配置文件的服务仅当激活该配置文件时启动。
services:
# 始终启动 — 无配置文件
api:
build: .
ports:
- '3000:3000'
depends_on:
db:
condition: service_healthy
db:
image: postgres:16-alpine
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres']
interval: 5s
timeout: 3s
retries: 5
volumes:
- db_data:/var/lib/postgresql/data
# 仅使用 --profile debug
pgadmin:
image: dpage/pgadmin4:latest
profiles: ['debug']
ports:
- '5050:80'
environment:
PGADMIN_DEFAULT_EMAIL: admin@admin.com
PGADMIN_DEFAULT_PASSWORD: admin
# 仅使用 --profile monitoring
prometheus:
image: prom/prometheus:latest
profiles: ['monitoring']
ports:
- '9090:9090'
grafana:
image: grafana/grafana:latest
profiles: ['monitoring']
ports:
- '3001:3000'
volumes:
db_data:
# 默认:仅 api + db
docker compose up -d
# 调试:api + db + pgadmin
docker compose --profile debug up -d
# 监控:api + db + prometheus + grafana
docker compose --profile monitoring up -d
# 多个配置文件
docker compose --profile debug --profile monitoring up -d
# 通过环境变量
COMPOSE_PROFILES=debug,monitoring docker compose up -d
配置文件命名规则: [a-zA-Z0-9][a-zA-Z0-9_.-]+ — 推荐使用小写短横线命名法。
包含 — 可组合配置
顶级键 include(在 Compose 2.20 中引入)允许将大型 compose 文件拆分为模块化、团队所有的部分。每个包含的文件使用其自己的项目目录上下文加载,正确解析相对路径。
# compose.yaml(根 — 应用层)
include:
- ./infra/compose.yaml # DB, Redis, 消息代理
- ./monitoring/compose.yaml # Prometheus, Grafana
services:
api:
build: .
depends_on:
- db # 在 infra/compose.yaml 中定义
- redis # 在 infra/compose.yaml 中定义
# infra/compose.yaml(基础设施层 — 平台团队所有)
services:
db:
image: postgres:16-alpine
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres']
interval: 5s
timeout: 3s
retries: 5
volumes:
- db_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 5s
timeout: 3s
retries: 5
volumes:
db_data:
include 是递归的 — 包含的文件本身可以包含其他文件。资源名称冲突会导致错误(无静默合并)。
健康检查最佳实践
始终在有状态服务上定义健康检查,以便 depends_on: condition: service_healthy 正确工作。没有健康检查,依赖服务可能在依赖项准备就绪前启动。
services:
db:
image: postgres:16-alpine
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER:-postgres}']
interval: 10s # 检查频率
timeout: 5s # 等待响应时间
retries: 5 # 标记为不健康前的失败次数
start_period: 30s # 容器启动期间的宽限期
redis:
image: redis:7-alpine
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 10s
timeout: 3s
retries: 3
api:
build: .
depends_on:
db:
condition: service_healthy # 等待直到 db 通过健康检查
redis:
condition: service_healthy
健康检查指南:
- 尽可能使用
CMD(数组形式)而非CMD-SHELL(字符串形式) — 避免 shell 注入风险 - 仅当需要 shell 功能时使用
CMD-SHELL(pg_isready、curl -f等) - 为启动慢的服务设置
start_period(JVM 应用、首次运行迁移) - 除非明确安装,避免在 Alpine 基础镜像中使用
curl;优先使用wget -q --spider或本机检查 - 对于 HTTP 服务:
test: ["CMD-SHELL", "wget -q --spider http://localhost:3000/health || exit 1"]
多阶段构建模式
使用多阶段 Dockerfiles 保持生产镜像最小化和安全。在 compose.yaml 中引用特定构建阶段以进行开发。
# Dockerfile
# 阶段 1: deps — 安装依赖
FROM node:20-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci
# 阶段 2: builder — 编译/转译
FROM deps AS builder
COPY . .
RUN npm run build
# 阶段 3: runner — 最小生产镜像
FROM node:20-alpine AS runner
RUN addgroup -g 1001 -S appgroup && adduser -S -u 1001 -G appgroup appuser
WORKDIR /app
COPY --from=builder --chown=appuser:appgroup /app/dist ./dist
COPY --from=deps --chown=appuser:appgroup /app/node_modules ./node_modules
USER appuser
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD wget -q --spider http://localhost:3000/health || exit 1
CMD ["node", "dist/index.js"]
# compose.yaml — 开发目标为 builder 阶段以加快迭代
services:
api:
build:
context: .
dockerfile: Dockerfile
target: builder # 开发时停止在 builder 阶段(包括 devDeps)
develop:
watch:
- action: sync
path: ./src
target: /app/src
ignore:
- node_modules/
- action: rebuild
path: package.json
# compose.prod.yaml — 生产使用完整 runner 阶段
services:
api:
build:
context: .
dockerfile: Dockerfile
target: runner # 最小化、非 root 生产镜像
restart: unless-stopped
资源限制(最佳实践)
始终定义资源限制以防止容器资源耗尽:
services:
api:
image: myapp:latest
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.25'
memory: 128M
restart: unless-stopped
工具
该技能提供 15 个工具,涵盖服务管理、监控、构建操作和故障排除类别:
服务管理(5 个工具)
up
启动 compose.yaml 中定义的服务。
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
detached |
boolean | 以分离模式运行 | true |
build |
boolean | 启动前构建镜像 | false |
force_recreate |
boolean | 重新创建容器 | false |
project_name |
string | 项目名称覆盖 | 目录名称 |
services |
array | 要启动的特定服务 | 所有服务 |
profiles |
array | 要激活的配置文件 | 无 |
watch |
boolean | 启用 Compose Watch 模式 | false |
示例:
docker compose up -d
docker compose up --build
docker compose up web api
docker compose --profile debug up -d
docker compose up --watch
安全: 生产环境需要确认。
down
停止并移除容器、网络、卷。
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
volumes |
boolean | 移除卷(已阻止) | false |
remove_orphans |
boolean | 移除孤立容器 | false |
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose down
docker compose down --remove-orphans
安全: 卷移除(-v 标志)默认已阻止。需要确认。
start
启动现有容器而不重新创建它们。
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
services |
array | 要启动的特定服务 | 所有服务 |
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose start
docker compose start web
stop
停止运行中的容器而不移除它们。
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
timeout |
number | 关闭超时(秒) | 10 |
services |
array | 要停止的特定服务 | 所有服务 |
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose stop
docker compose stop --timeout 30 web
restart
重启服务(停止 + 启动)。
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
timeout |
number | 关闭超时(秒) | 10 |
services |
array | 要重启的特定服务 | 所有服务 |
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose restart
docker compose restart api
状态与日志(3 个工具)
ps
列出容器及其状态信息。
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
all |
boolean | 显示所有容器(包括已停止的) | false |
services |
array | 按服务过滤 | 所有服务 |
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose ps
docker compose ps --all
输出字段: NAME, IMAGE, STATUS, PORTS
logs
查看服务日志,支持流式传输。
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
services |
array | 要查看日志的服务 | 所有服务 |
follow |
boolean | 跟随日志输出(流式) | false |
tail |
number | 显示的行数 | 100 |
timestamps |
boolean | 显示时间戳 | false |
since |
string | 显示自时间戳/持续时间后的日志 | 无 |
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose logs web
docker compose logs --tail 50 --follow api
docker compose logs --since "2026-01-01T10:00:00"
注意: 跟随模式在 60 秒后自动终止以防止无限流式传输。
top
显示容器中运行的进程。
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
services |
array | 要检查的服务 | 所有服务 |
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose top
docker compose top web
输出: 进程列表,包括 PID, USER, TIME, COMMAND
构建与镜像(3 个工具)
build
构建或重建服务镜像。
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
no_cache |
boolean | 无缓存构建 | false |
pull |
boolean | 拉取新镜像版本 | false |
parallel |
boolean | 并行构建 | true |
services |
array | 要构建的服务 | 所有服务 |
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose build
docker compose build --no-cache web
docker compose build --pull
安全: 无缓存构建需要确认(资源密集)。
pull
从注册表拉取服务镜像。
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
ignore_pull_failures |
boolean | 拉取失败时继续 | false |
services |
array | 要拉取的服务 | 所有服务 |
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose pull
docker compose pull web api
安全: 生产环境需要确认。
images
列出服务使用的镜像。
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose images
输出字段: CONTAINER, REPOSITORY, TAG, IMAGE ID, SIZE
执行(2 个工具)
exec
在运行中的容器中执行命令。
| 参数 | 类型 | 描述 | 必需 |
|---|---|---|---|
service |
string | 服务名称 | 是 |
command |
array | 要执行的命令 | 是 |
user |
string | 执行用户 | 容器默认 |
workdir |
string | 工作目录 | 容器默认 |
env |
object | 环境变量 | 无 |
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose exec web bash
docker compose exec -u root api ls -la /app
docker compose exec db psql -U postgres
安全:
- 破坏性命令(
rm -rf、dd、mkfs、sudo rm)已阻止 - 以 root 用户执行需要确认
- 默认超时:30 秒
run
在新容器中运行一次性命令。
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
service |
string | 要运行的服务 | 必需 |
command |
array | 要执行的命令 | 服务默认 |
rm |
boolean | 运行后移除容器 | true |
no_deps |
boolean | 不启动链接的服务 | false |
user |
string | 执行用户 | 容器默认 |
env |
object | 环境变量 | 无 |
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose run --rm web npm test
docker compose run --no-deps api python manage.py migrate
安全: 修改数据的命令需要确认。
配置(2 个工具)
config
验证和查看 Compose 文件配置。
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
resolve_image_digests |
boolean | 将镜像标签固定为摘要 | false |
no_interpolate |
boolean | 不插值环境变量 | false |
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose config
docker compose config --resolve-image-digests
输出: 解析和合并的 Compose 配置
port
打印服务端口的公共端口绑定。
| 参数 | 类型 | 描述 | 必需 |
|---|---|---|---|
service |
string | 服务名称 | 是 |
private_port |
number | 容器端口 | 是 |
protocol |
string | 协议(tcp/udp) | tcp |
project_name |
string | 项目名称覆盖 | 目录名称 |
示例:
docker compose port web 80
docker compose port db 5432
输出: <主机>:<端口> 绑定
常见工作流
启动开发环境
# 1. 验证配置
docker compose config
# 2. 拉取最新镜像
docker compose pull
# 3. 构建自定义镜像
docker compose build
# 4. 以分离模式启动服务
docker compose up -d
# 5. 检查服务状态
docker compose ps
# 6. 查看日志
docker compose logs --tail 100
使用 Compose Watch 进行实时开发
# 1. 确保 compose.yaml 中配置了 develop.watch 块
# 2. 以观察模式启动(前台,显示同步事件)
docker compose watch
# 3. 或以分离模式启动然后观察
docker compose up -d
docker compose watch --no-up
故障排除失败服务
# 1. 检查容器状态
docker compose ps --all
# 2. 查看服务日志
docker compose logs --tail 200 失败服务
# 3. 检查运行中的进程
docker compose top 失败服务
# 4. 检查配置
docker compose config
# 5. 重启服务
docker compose restart 失败服务
# 6. 如果需要,重新创建容器
docker compose up -d --force-recreate 失败服务
更新服务镜像
# 1. 拉取最新镜像
docker compose pull
# 2. 停止服务
docker compose down
# 3. 如果使用自定义 Dockerfiles,重建
docker compose build --pull
# 4. 使用新镜像启动
docker compose up -d
# 5. 验证服务
docker compose ps
调试服务连接性
# 1. 检查运行中的服务
docker compose ps
# 2. 检查端口映射
docker compose port web 80
docker compose port api 3000
# 3. 进入容器
docker compose exec web sh
# 4. 测试连接性(从容器内部)
docker compose exec web curl api:3000/health
# 5. 检查错误日志
docker compose logs web api
清理环境
# 1. 停止所有服务
docker compose down
# 2. 移除孤立容器
docker compose down --remove-orphans
# 3. 查看镜像
docker compose images
# 4. 清理(手动 - 卷移除已阻止)
# 卷需要明确确认后手动清理
使用配置文件处理环境特定服务
# 开发:仅默认服务
docker compose up -d
# 开发 + 调试工具
docker compose --profile debug up -d
# 启动监控堆栈
docker compose --profile monitoring up -d
# 通过环境变量(CI 中有用)
COMPOSE_PROFILES=monitoring docker compose up -d
# 停止和清理特定配置文件
docker compose --profile debug down
配置
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
COMPOSE_PROJECT_NAME |
默认项目名称 | 目录名称 |
COMPOSE_FILE |
Compose 文件路径 | compose.yaml |
COMPOSE_PROFILES |
逗号分隔的激活配置文件 | (无) |
COMPOSE_PATH_SEPARATOR |
多文件路径分隔符 | :(Linux/Mac),;(Windows) |
DOCKER_HOST |
Docker 守护进程套接字 | unix:///var/run/docker.sock |
COMPOSE_HTTP_TIMEOUT |
API 调用的 HTTP 超时 | 60 |
COMPOSE_PARALLEL_LIMIT |
最大并行操作 | 无限制 |
设置
-
安装 Docker Engine:
# macOS brew install --cask docker # Linux (Ubuntu/Debian) sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin # Windows # 从 docker.com 下载 Docker Desktop -
验证 Docker Compose:
# 检查 Docker 版本 docker --version # 检查 Compose 版本(必须是 V2,例如 2.24+) docker compose version -
创建 compose.yaml(无
version:字段 — V2 不需要):services: web: build: . ports: - '8080:80' depends_on: db: condition: service_healthy db: image: postgres:16-alpine environment: POSTGRES_PASSWORD: example healthcheck: test: ['CMD-SHELL', 'pg_isready -U postgres'] interval: 10s timeout: 5s retries: 5 -
测试技能:
docker compose config docker compose ps
安全功能
阻止的操作
默认阻止以下操作以防止意外数据丢失:
- 卷移除:
docker compose down -v(已阻止 - 需要手动确认) - 完全清理:
docker compose down -v --rmi all(已阻止 - 极具破坏性) - 破坏性执行:
rm -rf、dd、mkfs、sudo rm容器内部(已阻止) - 强制移除:
docker compose rm -f(已阻止 - 使用 stop 然后 rm)
需要确认
这些操作需要明确确认:
- 使用
--no-cache构建(资源密集) - 生产环境中拉取镜像
- 使用
--force-recreate启动服务 - 以 root 用户执行命令
- 运行修改数据库的命令
- 以非常短超时停止服务
自动终止操作
以下操作自动终止以防止资源问题:
- 日志跟随(
--follow):60 秒超时 - 服务执行(
exec):30 秒超时 - 一次性命令(
run):60 秒超时
错误处理
常见错误:
| 错误 | 原因 | 修复 |
|---|---|---|
docker: command not found |
Docker 未安装 | 安装 Docker Engine |
Cannot connect to Docker daemon |
Docker 未运行 | 启动 Docker 服务 |
network ... not found |
网络清理问题 | 运行 docker compose down 然后 up |
port is already allocated |
端口冲突 | 更改端口映射或停止冲突服务 |
no configuration file provided |
缺少 compose 文件 | 创建 compose.yaml |
service ... must be built |
镜像未构建 | 运行 docker compose build |
service unhealthy |
健康检查失败 | 检查 docker compose logs <服务> |
include path not found |
缺少包含文件 | 验证 include: 块中的路径 |
恢复:
- 验证配置:
docker compose config - 检查 Docker 状态:
docker info - 查看服务日志:
docker compose logs - 强制重新创建:
docker compose up -d --force-recreate - 干净重启:
docker compose down && docker compose up -d
与代理集成
该技能与以下代理集成:
主要代理
- devops:本地开发、CI/CD 集成、容器编排
- developer:应用开发、测试、调试
次要代理
- qa:集成测试、测试环境设置
- incident-responder:调试生产问题、服务恢复
- cloud-integrator:云部署、迁移到 Kubernetes
- performance-engineer:性能测试、资源优化
渐进式披露
该技能使用渐进式披露以最小化上下文使用:
- 初始加载: 仅元数据和工具名称(约 700 令牌)
- 工具调用: 按需加载特定工具模式(约 100-150 令牌)
- 结果流式传输: 大输出(日志)增量流式传输
- 上下文清理: 使用后清除旧结果
上下文优化:
- 使用
--tail限制日志输出 - 使用服务过滤器以针对特定容器
- 优先使用
ps而非ps --all仅用于活动服务 - 使用
--since进行时间限定日志查询
故障排除
技能问题
Docker Compose 未找到:
# 检查 Docker Compose 版本
docker compose version
# V1(docker-compose)已终止支持 — 升级到 V2
# Docker Compose V2 作为插件集成到 Docker CLI 中
权限被拒绝:
# 将用户添加到 docker 组(Linux)
sudo usermod -aG docker $USER
newgrp docker
# 验证权限
docker ps
Compose 文件问题:
# 验证语法
docker compose config
# 检查错误(安静模式 — 仅退出代码)
docker compose config -q
# 查看解析的配置
docker compose config --resolve-image-digests
网络问题:
# 列出网络
docker network ls
# 移除未使用的网络
docker network prune
# 重新创建服务
docker compose down
docker compose up -d
健康检查失败:
# 检查健康检查状态
docker inspect <容器_id> | grep -A 10 Health
# 查看健康检查输出
docker compose logs <服务>
# 手动运行健康检查命令
docker compose exec <服务> pg_isready -U postgres
Compose Watch 未同步:
# 验证 compose.yaml 中是否存在 develop.watch 块
docker compose config | grep -A 20 develop
# 确保 Compose 版本为 2.22+
docker compose version
# Watch 需要 build: 属性(不仅是 image:)
性能考虑
- 构建缓存: 使用层缓存以加快构建;除非必要,避免
--no-cache - 多阶段构建: 显著减少生产镜像大小(通常 80%+)
- 并行操作: Docker Compose V2 默认并行化;使用
COMPOSE_PARALLEL_LIMIT控制 - 资源限制: 在 compose 文件中定义 CPU/内存限制以防止资源耗尽
- 日志轮换: 使用日志驱动程序以防止磁盘空间问题
- 卷清理: 定期清理未使用的卷(需要手动确认)
- Compose Watch 与绑定挂载: 优先使用
develop.watch进行跨平台开发;绑定挂载在 macOS/Windows 上有 I/O 性能问题
相关
- Docker Compose 文档: https://docs.docker.com/compose/
- Compose 文件参考: https://docs.docker.com/compose/compose-file/
- Compose Watch 文档: https://docs.docker.com/compose/how-tos/file-watch/
- Compose 配置文件文档: https://docs.docker.com/compose/how-tos/profiles/
- Compose 包含文档: https://docs.docker.com/compose/how-tos/multiple-compose-files/include/
- Docker CLI: https://docs.docker.com/engine/reference/commandline/cli/
- Kubernetes 迁移:
.claude/skills/kubernetes-flux/(Kubernetes 编排)
来源
- Docker Compose 文档
- Docker Compose V2
- Compose 规范
- Docker 最佳实践
- 使用 Compose Watch
- 使用 Compose 配置文件
- Compose 包含指令
相关技能
cloud-devops-expert- 云平台(AWS、GCP、Azure)和 Terraform 基础设施
内存协议(强制)
开始前:
读取 .claude/context/memory/learnings.md
完成后:
- 新模式 ->
.claude/context/memory/learnings.md - 发现问题 ->
.claude/context/memory/issues.md - 做出决定 ->
.claude/context/memory/decisions.md
假设中断:如果不在内存中,则未发生。