网络顶层元素
网络是允许服务相互通信的层。
顶级networks元素允许您配置可跨多个服务重用的命名网络。要跨多个服务使用网络,您必须使用
顶级元素中的网络属性显式授予每个服务访问权限。顶级元素具有提供更精细控制的附加语法services。networks
例子
基本示例
在以下示例中,在运行时创建网络front-tier和 ,并将服务连接到和网络。back-tierfrontendfront-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:
# Use a custom driver
driver: custom-driver-1
backend:
# Use a custom driver which takes special options
driver: custom-driver-2
driver_opts:
foo: "1"
bar: "2"高级示例显示了一个定义两个自定义网络的 Compose 文件。服务与服务proxy之间是隔离的db,因为它们不共享公共网络。只能app与两者对话。
属性
司机
driver指定该网络应使用哪个驱动程序。如果驱动程序在平台上不可用,Compose 将返回错误。
networks:
db-data:
driver: bridge有关驱动程序和可用选项的详细信息,请参阅 网络驱动程序。
驱动程序选项
driver_opts将选项列表指定为要传递给驱动程序的键值对。这些选项取决于驱动程序。请参阅驱动程序文档以获取更多信息。
networks:
db-data:
driver_opts:
foo: "bar"
baz: 1可连接的
如果attachable设置为true,那么除了服务之外,独立容器还应该能够附加到该网络。如果独立容器连接到网络,它可以与也连接到网络的服务和其他独立容器进行通信。
networks:
mynet1:
driver: overlay
attachable: true启用ipv6
enable_ipv6启用 IPv6 网络。有关示例,请参阅
创建 IPv6 网络的第四步。
外部的
如果设置为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 配置。这是一个具有多个属性的对象,每个属性都是可选的:
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为网络设置自定义名称。名称字段可用于引用包含特殊字符的网络。该名称按原样使用,并且不受项目名称的限制。
networks:
network1:
name: my-app-net它还可以与属性结合使用external来定义 Compose 应检索的平台网络,通常通过使用参数,以便 Compose 文件不需要硬编码运行时特定值:
networks:
network1:
external: true
name: "${NETWORK_ID}"其他资源
有关更多示例,请参阅 Compose 中的网络。