网络顶级元素
网络允许服务相互通信。默认情况下,Compose 会为您的应用设置一个网络。服务的每个容器都加入默认网络,并且该网络上的其他容器都可以访问,并且可以通过服务的名称发现。顶级networks
元素允许您配置可在多个服务中重复使用的命名网络。
要跨多个服务使用网络,您必须使用services
top-level 元素。这networks
top-level 元素具有提供更精细控制的其他语法。
例子
基本示例
在以下示例中,在运行时,networksfront-tier
和back-tier
创建,并且frontend
服务
连接到front-tier
和back-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
指定应用于此网络的驱动程序。如果
驱动程序在平台上不可用。
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
设置为true
,则除了服务之外,独立容器还应该能够连接到此网络。
如果独立容器连接到网络,它可以与服务和其他独立容器通信
它们也连接到网络。
networks:
mynet1:
driver: overlay
attachable: true
enable_ipv6
enable_ipv6
启用 IPv6 网络。有关示例,请参阅创建 IPv6 网络的步骤 4。
外部
如果设置为true
:
external
指定此网络的生命周期在应用程序的生命周期之外进行维护。 Compose 不会尝试创建这些网络,如果不存在这些网络,则会返回错误。- 除 name 之外的所有其他属性都是无关紧要的。如果 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"
内部
默认情况下,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"
组合集com.docker.compose.project
和com.docker.compose.network
标签。
名字
name
设置网络的自定义名称。name 字段可用于引用包含特殊字符的网络。
该名称按原样使用,并且不与项目名称划定范围。
networks:
network1:
name: my-app-net
它还可以与external
属性来定义 Compose
应该检索,通常通过使用参数,这样 Compose 文件就不需要对运行时特定的值进行硬编码:
networks:
network1:
external: true
name: "${NETWORK_ID}"
其他资源
有关更多示例,请参阅 Compose 中的联网。