网络顶级元素

网络允许服务相互通信。默认情况下,Compose 为您的应用程序设置单个网络。每个服务的容器都加入默认网络,并且可以通过该网络上的其他容器访问,并且可以通过服务的名称发现。顶级networks元素允许您配置可在多个服务中重复使用的命名网络。

要在多个服务中使用网络,必须使用services顶级元素中的networks属性明确授予每个服务访问权限。networks顶级元素具有提供更精细控制的附加语法。

示例

基本示例

在以下示例中,在运行时,将创建网络front-tierback-tier,并且frontend服务将连接到front-tierback-tier网络。

services:
  frontend:
    image: example/webapp
    networks:
      - front-tier
      - back-tier

networks:
  front-tier:
  back-tier:

高级示例

services:
  proxy:
    build: ./proxy
    networks:
      - frontend
  app:
    build: ./app
    networks:
      - frontend
      - backend
  db:
    image: postgres
    networks:
      - backend

networks:
  frontend:
    # Specify driver options
    driver: bridge
    driver_opts:
      com.docker.network.bridge.host_binding_ipv4: "127.0.0.1"
  backend:
    # Use a custom driver
    driver: custom-driver

高级示例显示了一个 Compose 文件,该文件定义了两个自定义网络。proxy服务与db服务隔离,因为它们没有共享网络。只有app可以与两者通信。

属性

driver

driver指定应为此网络使用哪个驱动程序。如果平台上没有此驱动程序,Compose 将返回错误。

networks:
  db-data:
    driver: bridge

有关驱动程序和可用选项的更多信息,请参见网络驱动程序

driver_opts

driver_opts指定要传递给驱动程序的键值对选项列表。这些选项取决于驱动程序。

networks:
  frontend:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.host_binding_ipv4: "127.0.0.1"

请参阅网络驱动程序文档了解更多信息。

attachable

如果将attachable设置为true,则除了服务之外,独立容器还应该能够连接到此网络。如果独立容器连接到网络,则它可以与服务和也连接到网络的其他独立容器通信。

networks:
  mynet1:
    driver: overlay
    attachable: true

enable_ipv6

enable_ipv6启用 IPv6 网络。有关示例,请参见创建 IPv6 网络的步骤四。

external

如果设置为true

  • external指定此网络的生命周期由应用程序外部维护。Compose 不会尝试创建这些网络,如果网络不存在,则会返回错误。
  • 除名称外,所有其他属性均不相关。如果 Compose 检测到任何其他属性,它会将 Compose 文件拒绝为无效。

在下面的示例中,proxy是外部世界的网关。Compose 不会尝试创建网络,而是查询平台以查找名为outside的现有网络,并将proxy服务的容器连接到它。

services:
  proxy:
    image: example/proxy
    networks:
      - outside
      - default
  app:
    image: example/app
    networks:
      - default

networks:
  outside:
    external: true

ipam

ipam指定自定义 IPAM 配置。这是一个具有多个属性的对象,每个属性都是可选的

  • driver:自定义 IPAM 驱动程序,而不是默认驱动程序。
  • config:包含零个或多个配置元素的列表,每个元素都包含一个
    • subnet:以 CIDR 格式表示网络段的子网
    • ip_range:分配容器 IP 的 IP 范围
    • gateway:主子网的 IPv4 或 IPv6 网关
    • aux_addresses:网络驱动程序使用的辅助 IPv4 或 IPv6 地址,作为主机名到 IP 的映射
  • options:作为键值映射的驱动程序特定选项。
networks:
  mynet1:
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16
          ip_range: 172.28.5.0/24
          gateway: 172.28.5.254
          aux_addresses:
            host1: 172.28.1.5
            host2: 172.28.1.6
            host3: 172.28.1.7
      options:
        foo: bar
        baz: "0"

internal

默认情况下,Compose 为网络提供外部连接。将internal设置为true,允许您创建外部隔离的网络。

labels

使用labels向容器添加元数据。您可以使用数组或字典。

建议您使用反向 DNS 符号来防止标签与其他软件使用的标签冲突。

networks:
  mynet1:
    labels:
      com.example.description: "Financial transaction network"
      com.example.department: "Finance"
      com.example.label-with-empty-value: ""
networks:
  mynet1:
    labels:
      - "com.example.description=Financial transaction network"
      - "com.example.department=Finance"
      - "com.example.label-with-empty-value"

Compose 设置com.docker.compose.projectcom.docker.compose.network标签。

name

name设置网络的自定义名称。name字段可用于引用包含特殊字符的网络。名称按原样使用,不会与项目名称限定。

networks:
  network1:
    name: my-app-net

它还可以与external属性结合使用,以定义 Compose 应检索的平台网络,通常通过使用参数来实现,这样 Compose 文件不需要硬编码运行时特定值

networks:
  network1:
    external: true
    name: "${NETWORK_ID}"

附加资源

有关更多示例,请参见Compose 中的网络