首页/云/Docker 容器速查/services 定义与容器命名规则
Compose 编排55 条

services 定义与容器命名规则

services 是 compose 文件的主体:每个键是一个服务名,容器默认命名为 项目_服务_序号,服务名也是 exec/logs 等命令的定位参数。

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

services 是什么

services 是 compose 文件的顶层键,也是整套编排的主体:每个子键是一个服务名,Compose 按它创建容器、注册网络别名、建立依赖关系。一份 compose 文件可以没有 volumes、networks、configs,但不能没有 services。

基本信息

文件结构services / networks / volumes / configs / secrets 五个顶层键,services 必填
容器命名默认 <项目名>-<服务名>-<序号>,如 shop-web-1
项目名来源-p 参数指定,默认取 compose 文件所在目录名
服务名作用logs / exec / run / build / ps 等命令的定位参数
固定名称container_name 可覆盖默认命名

典型使用场景

  • 本地一键起一组服务(web + api + db + 缓存),省掉一串 docker run 参数
  • 容器间互访直接写服务名:同一项目网络内有嵌入式 DNS 解析,容器重建换 IP 也不影响调用方
  • 多环境复用同一份文件:开发环境走 build、生产环境走 image,用覆盖文件与 .env 切换差异
  • 把启动依赖写进 depends_on,up 时按依赖顺序拉起
  • CI 里用 docker compose up -d 起测试依赖,跑完 docker compose down 清理
  • 把服务拓扑当成可评审的文件提交进仓库,配合 docker compose config 在合并前校验

最小示例

最小示例
services:
  web:
    image: nginx:1.27-alpine      # 一个服务默认对应一个容器
    ports:
      - "8080:80"                # 宿主端口:容器端口
  api:
    build: ./api                 # 也可以只写 image 直接拉取
    depends_on:
      - web                      # 仅保证启动顺序
  worker:
    image: app/worker:1.4.2
    restart: unless-stopped      # 生产常用重启策略
    command: ["./worker", "--concurrency=4"]

服务名与容器名对照

文件里的写法实际容器名说明
webshop-web-1默认 <项目名>-<服务名>-<序号>,序号从 1 开始
container_name: shop-webshop-web固定名字,无法再用 --scale 扩容
启动时加 -p prodprod-web-1项目名决定网络与卷的命名前缀
-p prod up --scale web=3prod-web-1/2/3扩容后靠序号区分副本
服务名同时是网络别名:同项目网络内的其他服务用服务名就能连通,这也是容器重建后 IP 变化不影响调用的原因。
改服务名的代价是容器重建加别名变更,反向代理 upstream、数据库白名单、监控采集等引用它的地方要同步改,上线后尽量不动名字。
服务名同时也决定了网络别名与卷前缀:同一份文件换项目名(-p)启动会得到完全独立的一套容器、网络与卷,这也是在同一台机器上并行跑多套环境的方法。

易错点

  • 容器名默认带项目名:换个目录或换个 -p 参数启动会生成一套全新容器,旧容器仍占着宿主端口,表现为 Address already in use
  • container_name 固定名称与 docker compose up --scale 冲突,需要多副本的服务不要固定容器名
  • 不同 compose 项目默认使用各自的网络,跨项目按服务名访问会失败,需要声明 external 网络或改用宿主机访问
  • 服务定义顺序不等于启动顺序,只保证创建顺序;真正要等待依赖就绪得用 depends_on 的 condition 长语法
  • depends_on 形成环时 compose 会直接报 dependency cycle detected 拒绝启动,依赖关系复杂时先画一遍调用图再落文件

数据来源与参考

  • Docker 官方文档:Compose services 顶层元素(docs.docker.com/reference/compose-file/services)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌