Docker Compose 速查
用 compose.yaml 声明多容器应用,再通过 docker compose 管理。以下采用 Compose 插件命令,不使用旧版独立程序 docker-compose。
一个可运行的最小配置
services:
web:
image: nginx:alpine
ports:
- "127.0.0.1:8080:80"
restart: unless-stopped
volumes:
- site:/usr/share/nginx/html
volumes:
site:
当前 Compose Specification 不要求顶层 version。端口映射加引号,缩进用空格。可以使用 YAML 工具检查语法,但实际配置应再用 docker compose config 验证。
常用命令
docker compose config
docker compose up -d
docker compose up -d --build
docker compose ps
docker compose logs -f --tail 100 web
docker compose exec web sh
docker compose run --rm web nginx -t
docker compose pull
docker compose restart web
docker compose stop
docker compose down
exec 在已有容器里执行,run 为一次性任务创建新容器。修改环境变量或服务配置后应 up -d 重建需要更新的容器,单独 restart 不会应用全部配置变更。
down 删除项目容器与网络;down -v 还会删除相关命名卷和匿名卷,会影响持久化数据。声明为 external 的资源由外部管理。
环境变量的两层含义
services:
app:
image: "myapp:${APP_TAG:-dev}"
environment:
LOG_LEVEL: "${LOG_LEVEL:-info}"
env_file:
- app.env
- shell、
.env、CLI 的--env-file为 Compose 文件的变量插值提供值。 - 服务下的
environment、env_file为容器提供环境变量。 .env中有一个变量,不等于它自动进入容器。$$用于在 Compose 插值阶段保留字面的美元符号。
docker compose --env-file staging.env config
docker compose config --environment
配置输出可能包含展开后的密码,分享前先检查。准确的读取顺序及项目目录规则见 Docker 插值文档。
就绪检查与依赖
services:
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: "${DB_PASSWORD:?请设置 DB_PASSWORD}"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 3s
retries: 10
app:
image: myapp:dev
depends_on:
db:
condition: service_healthy
这是依赖关系片段,myapp:dev 需要替换为实际镜像。简单的 depends_on 只表达启动顺序;要等待服务健康需配置 healthcheck 和条件,应用自身仍应处理断线重试。
多文件、配置档与扩展
docker compose -f compose.yaml -f compose.prod.yaml config
docker compose --profile debug up -d
docker compose up -d --scale worker=3
多文件合并先看最终 config。需要扩副本的服务不要设置固定 container_name,也要避免多个副本竞争同一宿主机端口。Swarm 的 docker stack deploy 不等于 Compose,见 Swarm 速查。
来源与许可
本页由 Jacob’s Wiki 于 2026-11-05 对 IT-Tools 原文作中文摘译、重组和补充,保留常用操作,并非逐行全译。原文归 IT-Tools 项目贡献者所有。
本页译文与改编内容按 GNU GPL 3.0 提供,不附带担保;本站 Markdown 源码可用于修改和再分发。