固定容器名换来什么
compose 默认按「项目名_服务名_序号」给容器命名,好处是多个项目与多副本互不冲突。给服务加 container_name 可以写死容器名,外部脚本与人工命令不用再关心项目前缀,代价是这个服务不能再扩容——同一台机器上出现两个同名容器会直接冲突。它适合单实例常驻服务与需要被外部工具按名引用的场景。
基本信息
| 字段 | container_name: 名称(服务级) |
|---|---|
| 效果 | 容器名固定,不再带项目前缀与序号 |
| 限制 | 与 --scale 扩容冲突,同名容器无法共存 |
| 默认命名 | 项目名_服务名_序号,如 shop-web-1 |
典型使用场景
- 运维脚本按名操作:日志采集、备份脚本里写固定容器名,不随项目名变化
- 本地开发省事:单实例服务用简短名字,docker exec 不用带项目前缀
- 监控与告警对接:探针配置里引用固定容器名,避免模板渲染前缀
- 迁移期对齐:把外部系统依赖的老容器名保留下来,减少联调改造
- 明确单实例约束:用固定名表达「这个服务就是一份」,防止误扩容
配置与验证
配置与验证
services:
web:
image: nginx:1.27-alpine
container_name: app-web # 固定名,外部命令直接用
ports:
- "8080:80"
api:
image: app/api:1.4.2
# 不写 container_name,保留默认命名以支持多副本
deploy:
replicas: 2默认命名与固定名对照
| 维度 | 默认命名 | container_name 固定 |
|---|---|---|
| 容器名 | 项目名_服务名_序号 | 写死为指定名称 |
| 扩容 | 支持 --scale 与多副本 | 扩容会报名字冲突 |
| 外部引用 | 需要知道当前项目名 | 命令与脚本里可直接引用 |
| 同机多环境 | 靠项目名天然隔离 | 同名会直接冲突 |
固定名适合单实例常驻服务;需要副本、滚动替换或同机多套环境的服务保持默认命名更灵活。
不给项目名时 compose 用当前目录名作为项目名,目录改名会让默认容器名一起变化,固定名不受这个影响。