网络顶级元素
网络允许服务之间相互通信。默认情况下,Compose 为您的应用程序设置了一个单一的网络。每个服务的容器都会加入默认网络,并且可以被该网络上的其他容器访问,也可以通过服务的名称被发现。顶层的 networks 元素允许您配置可以在多个服务之间重用的命名网络。
要在多个服务中使用网络,您必须通过在顶级元素services中使用网络属性显式授予每个服务访问权限。顶级元素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:高级示例
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: trueenable_ipv6
enable_ipv6 启用IPv6网络。例如,请参见创建IPv6网络的第四步。
external
如果设置为 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: trueipam
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向容器添加元数据。您可以使用数组或字典。
建议您使用反向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
name 为网络设置一个自定义名称。名称字段可用于引用包含特殊字符的网络。
名称按原样使用,不与项目名称一起限定范围。
networks:
network1:
name: my-app-net它也可以与external属性结合使用,以定义Compose应检索的平台网络,通常通过使用参数来实现,这样Compose文件就不需要硬编码运行时特定的值:
networks:
network1:
external: true
name: "${NETWORK_ID}"额外资源
更多示例,请参见 Compose中的网络。