网络顶级元素
要跨多个服务使用网络,必须通过在 `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:
高级示例
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
driver
指定了应为此网络使用哪个驱动程序。如果平台上没有此驱动程序,Compose 会返回错误。
networks:
db-data:
driver: bridge
有关驱动程序和可用选项的更多信息,请参阅 网络驱动程序。
driver_opts
driver_opts
指定了以键值对形式传递给驱动程序的选项列表。这些选项取决于驱动程序。有关更多信息,请参阅驱动程序文档。
networks:
db-data:
driver_opts:
foo: "bar"
baz: 1
attachable
如果 attachable
设置为 true
,则除了服务之外,独立容器还能够连接到此网络。如果独立容器连接到网络,它可以与服务和其他连接到该网络的独立容器进行通信。
networks:
mynet1:
driver: overlay
attachable: true
enable_ipv6
enable_ipv6
启用 IPv6 网络。有关示例,请参阅 创建 IPv6 网络 的步骤四。
external
如果设置为 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
指定了自定义 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
使用 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 中的网络。