docker-compose文件属性(3)顶部元素networks

networks使服务能够相互通信。默认情况下,Compose 会为您的应用程序设置一个单一的网络。每个服务的容器都会加入 default 网络,并且可以在该网络中的其他容器之间被访问到,同时还能通过服务的名称发现该服务。顶级的 networks 元素允许配置具有名称的网络,这些网络可以在多个服务中重复使用。

若要在多个服务中使用网络,必须通过在"services"顶级元素内使用"networks"属性来明确授予每个服务访问权限。该"networks"顶级元素具有更复杂的语法,可提供更精细的控制。

基本实例:在以下示例中,在运行时会创建网络 front-tier 和 back-tier,并且 frontend 服务会与 front-tier 和 back-tier 网络相连接。

复制代码
services:
  frontend:
    image: example/webapp
    networks:
      - front-tier
      - back-tier

networks:
  front-tier:
  back-tier:

高级实例:此示例展示了一个"Compose"文件,该文件定义了两个自定义网络。proxy 服务与 db 服务相互隔离,因为它们不共用同一网络。只有 app 服务能够与两者进行通信。

复制代码
services:
  proxy:
    build: ./proxy
    networks:
      - frontend
  app:
    build: ./app
    networks:
      - frontend
      - backend
  db:
    image: postgres:18
    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

default网络:当一个 Compose 文件未明确指定网络时,Compose 会使用一个隐式的 default 网络。未明确指定网络的服务会通过 Compose 连接到这个默认网络:

复制代码
services:
  some-service:
    image: foo

#该示例与虾下面的示例相同            
services:
  some-service:
    image: foo
    networks:
      default: {}  
networks:
  default: {}      

可以通过明确的声明来自定义 default 网络:

复制代码
networks:
  default: 
    name: a_network # Use a custom name
    driver_opts:    # pass options to driver for network creation
      com.docker.network.bridge.host_binding_ipv4: 127.0.0.1

networks子属性:

  • attachable:如果该属性设置为 true ,那么独立容器应能够连接到此网络,除了服务之外。如果一个独立容器连接到该网络,它就能够与同样连接到该网络的服务以及其他独立容器进行通信。

    networks:
    mynet1:
    driver: overlay
    attachable: true

  • driver:指定此网络应使用何种驱动程序。如果该驱动程序在当前平台上不可用,Compose 将返回错误信息。

    networks:
    db-data:
    driver: bridge

  • driver_options:以键值对的形式指定一系列选项,以便传递给驱动程序。这些选项取决于具体的驱动程序。

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

  • enable_ipv4:需要Docker Compose 2.33.1 及以上版本。启用 IPv4 地址分配。

  • enable_ipv6:启用IPv6地址分配

    复制代码
    networks:
      ip6net:
        enable_ipv4: false
        enable_ipv6: true
  • external:如果设置为 true,指定该网络的生命周期独立于应用程序的生命周期。Compose 不会尝试创建这些网络,如果不存在此类网络则会返回错误信息。除了 name 之外的所有其他属性均无关紧要。如果 Compose 发现有任何其他属性,它就会将该 Compose 文件判定为无效。
    在以下示例中,proxy 是通往外部世界的入口。它并非试图构建网络,而是向平台查询一个名为 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"

  • nternal:默认情况下,Compose 提供了与外部网络的连接功能。而当"internal"设置为"true"时,便能够创建一个与外部网络完全隔离的网络。

  • 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.project 和 com.docker.compose.network 标签

  • name:用于为网络设置自定义名称。名称字段可用于引用包含特殊字符的网络。该名称将直接使用,且不会与项目名称绑定。

    networks:
    network1:
    name: my-app-net

它还可以与外部属性结合使用,以定义 Compose 应该获取的平台网络,通常通过使用一个参数来实现,这样 Compose 文件就不必硬编码运行时特定的值了:

复制代码
networks:
  network1:
    external: true
    name: "${NETWORK_ID}"
相关推荐
tianyuanwo2 小时前
Jenkins Job管理实战指南:增删改查与批量操作技巧
运维·jenkins
Q16849645152 小时前
红帽Linux-文件权限管理
linux·运维·服务器
不当菜虚困3 小时前
centos7虚拟机配置网络
运维·服务器·网络
fiveym3 小时前
CI/CD 核心原则 + 制品管理全解析:落地要求 + 存储方案
linux·运维·ci/cd
小北方城市网3 小时前
Spring Security 认证授权实战(JWT 版):从基础配置到权限精细化控制
java·运维·python·微服务·排序算法·数据库架构
AIGCExplore3 小时前
运维常用技术官网及工具整理手册
运维
抓娃小兵3 小时前
购买一台服务器后该做什么
运维·服务器
PellyKoo3 小时前
VS Code Remote-SSH 连接时提示“ 无法监视文件更改,请按照说明链接来解决此问题”解决方法
运维·ssh
橘颂TA3 小时前
【Linux 网络】应用层自定义协议和序列化
linux·运维·服务器·网络·tcp·结构与算法·序列化和反序列