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}"
相关推荐
EverydayJoy^v^1 天前
RH134学习进程——十二.运行容器(1)
linux·运维·容器
java_logo1 天前
OpenProject Docker 容器化部署指南:从快速启动到生产环境配置
docker·容器·openproject·openproject部署·openproject部署手册·openproject部署方案·openproject部署教程
b***25111 天前
电池组PACK自动化生产线的关键流程与核心优势
运维·自动化
曦云沐1 天前
【避坑指南】Ubuntu更新报错“Repository is not signed”的快速修复
linux·ubuntu·docker
哲伦贼稳妥1 天前
职场发展-遇到以下情况请直接准备后手吧
运维·经验分享·其他·职场和发展
Exquisite.1 天前
企业高性能web服务器(4)
运维·服务器·前端·网络·mysql
北塔软件1 天前
北塔方案 | 政府行业IT运维解决方案
运维·it运维·解决方案·政务
cg_ssh1 天前
Docker 下启动 Nacos 3.1.1 单机模式
运维·docker·容器
修己xj1 天前
使用 Docker 部署 SQL Server 并导入 .mdb 文件的完整指南
运维·docker·容器
郝亚军1 天前
ubuntu-18.04.6-desktop-amd64安装步骤
linux·运维·ubuntu