可通过docker compose up --scale(运行时临时调整)和deploy.replicas(配置文件固化设置)两种方式控制单机服务副本数;前者灵活适用于测试与突发流量,后者适合生产环境持久生效,均无需swarm集群。

可以通过两种主流方式控制单机环境下某个服务的容器副本数:一种是运行时临时调整,用 docker compose up --scale;另一种是配置文件中固化设置,用 deploy.replicas。两者都适用于单机模式,无需 Swarm 集群。
用 --scale 命令快速临时扩容
这是最灵活的方式,适合测试、压测或应对突发流量:
- 语法简单:
docker compose up --scale <service-name>=<count> -d</count></service-name> - 例如启动 4 个 web 实例:
docker compose up --scale web=4 -d - 支持一次扩多个服务:
--scale web=3 --scale api=2 - 会停掉旧容器、新建指定数量的新实例,不影响其他服务
- 下次执行
docker compose up -d不带--scale,就会恢复为配置文件里定义的数量(或默认 1)
在 docker-compose.yml 中设 deploy.replicas 固定副本数
适合生产或稳定环境,每次启动都自动按设定数量运行:
- 在服务定义下添加:
deploy:<br> replicas: 3
- 必须配合
docker compose up -d使用(不是up --scale) - 从 Compose v2.17+ 起,单机模式下也支持该字段,CLI 内部自动调度多副本
- 注意:若服务暴露了宿主机端口(如
ports: ["80:80"]),多个副本不能共用同一端口,需改用expose+ 反向代理(如 Nginx)分发流量
验证和管理已扩展的容器
扩容后可通过以下命令确认实际运行情况:
-
docker compose ps:列出所有容器,含序号(如web-1、web-2) -
docker compose ps web:只看 web 服务的所有实例 -
docker compose ps --services:列出当前定义的服务名 - 动态再调:直接执行新
docker compose up --scale web=6 -d,Compose 会自动替换旧副本
需要避开的常见问题
避免因配置或理解偏差导致扩容失败:
-
docker compose scale和旧版docker-compose scale已完全移除,运行即报错 - 有状态服务(如 PostgreSQL、Redis 单节点)不建议盲目扩副本,除非已做主从或分片设计
- 多个副本共享网络,但彼此隔离运行环境;内部通过服务名(如
web)DNS 负载均衡通信 - 资源限制建议同步配置,防止某实例抢占过多 CPU 或内存:
deploy:<br> replicas: 4<br> resources:<br> limits:<br> memory: 512M<br> cpus: '0.5'











