首页/云/Docker 容器速查/compose 扩容 --scale 与副本数
Compose 编排55 条

compose 扩容 --scale 与副本数

把服务扩到多个副本:up --scale 服务=N 临时扩容,deploy.replicas 固化副本数;固定宿主端口与固定容器名会阻止扩容。

Docker 容器速查云更新于 2026-10-13

扩容机制说明

Compose 可以把一个服务扩成多个副本:up --scale 服务=N 做临时扩容,文件里的 deploy.replicas 固化副本数。扩容的前提是服务无状态、不绑定固定宿主端口、也不指定固定容器名,否则第二个副本会因为端口占用或名称冲突起不来。缩容时多余的容器会被直接删除。

基本信息

临时扩容docker compose up -d --scale web=3
固化副本数deploy.replicas: 3
冲突项container_name 与固定 ports 映射
适用范围无状态服务
查看方式docker compose ps 列出各副本

典型使用场景

  • 提升无状态服务的并发处理能力
  • 发布前临时扩容、发布后缩回原副本数
  • 本地验证多副本下的负载均衡行为
  • 压测时快速增加副本观察瓶颈
  • 缩容以释放宿主资源

文件中的副本数

文件中的副本数
services:
  web:
    image: app/web:1.4.2
    deploy:
      replicas: 3        # 固化副本数
    # 注意:不要写 container_name,否则无法扩容
    # 也不要使用固定的宿主端口映射,否则副本会端口冲突

扩容与缩容

扩容与缩容
docker compose up -d --scale web=3                    # 临时扩到 3 个副本
docker compose ps --format 'table {{.Name}}	{{.Service}}	{{.Status}}'
docker compose up -d --scale web=1                    # 缩回单副本
docker compose logs --tail=20 web                     # 查看该服务所有副本的日志

扩容方式对比

方式写法特点
临时扩容up -d --scale web=3不改文件,重新 up 会回到文件定义
固化副本deploy.replicas: 3每次 up 都按该值收敛
冲突项container_name 与固定端口存在时扩容直接失败
缩容把数值调小多余容器被直接删除
多副本只在服务无状态时才有效;会话共享、定时任务这类进程要考虑任务被重复执行的问题。
缩容会直接删除多余容器,容器内未持久化的数据一并消失,需要保留的内容应放在卷或外部存储中。

扩容前检查

  • 服务是否无状态,会话与本地缓存是否可丢弃
  • 是否使用了固定宿主端口映射,需要改为不发布端口
  • 是否设置了固定容器名,需要移除才能扩容
  • 扩容目标数是否与宿主资源匹配,避免副本互相抢占

易错点

  • ports 写成固定的宿主端口映射:第二个副本因端口冲突启动失败,扩容服务应改由反向代理或随机端口接入
  • 指定了 container_name:名称唯一性导致扩容直接报错
  • 给定时任务类服务开多副本:任务被重复执行,产生重复数据或重复通知
  • 缩容前没确认副本内有未持久化数据:容器被删后无法找回

数据来源与参考

  • Docker 官方 CLI 参考:docker compose up --scale(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌