首页/云/Docker 容器速查/compose networks 字段与网络别名
Compose 编排55 条

compose networks 字段与网络别名

服务级 networks 决定接入哪些网络:同一项目服务默认进 <项目名>_default 网络按服务名互访,可用 aliases 追加解析名。

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

compose networks 是什么

Compose 文件里的 networks 用来划分服务之间的网络边界。同一项目里没有显式指定网络的服务,会被放进名为「项目名_default」的自定义网络,在这张网里可以直接用服务名互相解析。服务级 networks 决定某个服务接入哪几张网,顶层 networks 则定义这些网络本身的驱动与选项。自定义网络自带内嵌 DNS,这是默认 bridge 网络不具备的能力,也是编排里靠服务名通信的基础。

基本信息

服务级字段networks: [网络名] 或网络名: {aliases: [...], ipv4_address: …}
顶层字段networks: 网络名: {driver, driver_opts, internal, attachable, name, external, ipam}
默认网络<项目名>_default,由 Compose 自动创建与删除
网络别名aliases 追加解析名,一个服务可有多个名字
跨项目共享网络标 external: true 并给出已有网络名
解析机制容器内 DNS 127.0.0.11,按服务名/别名/容器名解析

典型使用场景

  • 前后端分层:前端只进边缘网络,数据库只进后端网络,减少横向可达面
  • 把数据库网络标记 internal 禁止出网,降低数据外泄风险
  • 多个 Compose 项目共用一张已存在的网络,实现跨项目服务互访
  • 给服务起稳定别名,避免因服务改名导致连接串集体失效
  • 按环境划分网络,让测试与开发的服务即使同名也互不干扰
  • 做流量治理演练:把某个服务从网络里摘掉,观察上游的失败与重试行为

服务级与顶层写法

服务级与顶层写法
services:
  api:
    image: app/api:1.4.2
    networks:
      edge: {}
      backend:
        aliases:
          - api.internal        # 连接串里可用这个名字
  db:
    image: postgres:16-alpine
    networks:
      - backend                 # 只进后端网,前端访问不到

networks:
  edge:
    driver: bridge
  backend:
    driver: bridge
    internal: true              # 只有容器之间互通,不出外网

接入共享网络(跨项目)

接入共享网络(跨项目)
services:
  worker:
    image: app/worker:1.4.2
    networks:
      - shared

networks:
  shared:
    external: true
    name: platform-shared     # 已存在的网络,Compose 只接入不创建

顶层选项怎么读

选项作用注意事项
driver网络驱动,常用 bridgeswarm 覆盖网络才用 overlay
internal禁止该网络访问外网镜像拉取发生在构建阶段,不受影响
external引用已存在网络不经手创建缺 name 时会按项目名推断,容易接错
name指定实际网络名跨项目共享时必写
attachable允许独立容器接入排查时临时挂调试容器用
ipam自定义子网与网关只有与既有网段冲突时才需要
验证方式:docker network inspect <项目名>_<网络名> 看 Containers 列表与别名是否符合预期;容器内用 getent hosts 服务名 确认解析。
接入网络属于容器创建时的属性,改网络归属必须重建容器。多文件合并或多项目拼接时最容易漏网络,改完先跑 docker compose config 核对渲染结果。

易错点

  • 两个服务没有显式接入同一张网络时解析不到对方名字,跨文件组合的项目尤其容易漏
  • internal 网络里的服务无法访问外部接口,需要拉取外部资源的任务不要放进去
  • external 网络只写 external: true 不写 name 时按项目名推断,换项目名就接不上,报网络不存在
  • 网络改动必须重建容器才生效,只 restart 会继续用旧网络配置

数据来源与参考

  • Docker 官方文档:Compose networks 参考(docs.docker.com/reference/compose-file/services)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌