docker-compose.yml中服务名管理
1. docker-compose.yml 中“服务名”的本质
1.1 服务名是什么
在 docker-compose.yml 里,services 下的一级 key 就是服务名,它是 Compose 世界里的“逻辑身份”,不是容器名,但会参与生成容器名、网络 DNS 名称等。
1 | version: "3.9" |
这里的 web、db 就是服务名。
1.2 服务名的几个关键作用
docker compose up web:精确启动某一个服务- 容器默认名:
<project>_<service>_<index> - 同一 compose 网络内的 DNS 名:服务名就是主机名(
web:80、db:3306) - 依赖关系(
depends_on)的锚点
2. 如何提取服务名
2.1 直接查看(最直观)
1 | cat docker-compose.yml |
看 services: 下的一级缩进字段即可。
2.2 命令行自动提取(脚本/自动化常用)
1 | docker compose config --services |
输出示例:
web
db
redis
这是最推荐的方式,因为它会解析变量、extends、profiles 之后的“真实服务列表”。
3. 逐个 up 服务(手动方式)
3.1 启动单个服务
1 | docker compose up -d web |
3.2 按顺序逐个启动
1 | docker compose up -d db |
Compose 会自动处理:
- 已存在的网络不会重复创建
- 已运行的服务不会重复拉起
4. 逐个 up 服务(自动化/脚本方式)
4.1 最常见的一行写法
1 | for s in $(docker compose config --services); do |
在做受控启动 / 降低资源抖动时的标准姿势。
4.2 指定顺序(生产更推荐)
1 | services=( |
原因很简单:
config --services的顺序 ≠ 业务依赖顺序- 数据层、缓存层、应用层最好明确控制
5. 与 depends_on 的关系(一个常见误区)
5.1 depends_on 并不等于“逐个 up”
1 | services: |
它只保证:
- 启动顺序(不是就绪状态)
- 不会等待 db / redis 真正可用