9.2.2 networks

默认情况下,Compose为你的应用程序设置了一个单独的网络。服务的每个容器都加入默认网络,并且可以被该网络上的其他容器访问,并且可以通过与容器名称相同的主机名被它们发现。

例如,如下compose.yml配置文件存放在一个名为myapp的目录下:

services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres
    ports:
      - "8001:5432"

当你执行docker compose up

  1. 创建一个名为myapp_default网络

  2. 使用web的配置创建容器,容器以web这个名称加入网络myapp_default。

  3. 使用db的配置创建容器,容器以名称db加入网络myapp_default。

现在,每个容器都可以查找主机名web或db,并获得相应的容器IP地址。

配置自定义网络

除了使用默认的网络,你还可以使用networks关键字自定义网络。这允许你创建更复杂的拓扑并指定自定义网络驱动程序和选项。您还可以使用它将服务连接到外部创建的网络,这些网络不是由Compose管理的。

每个service都可以使用netowrks关键字指定要连接的网络。

下面的示例展示了一个Compose文件,它定义了两个网络。其中,proxy服务与db服务是隔离的,因为它们不共享公共网络;而app可以与proxy和db通信。

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"

配置默认网络

可以通过在网络下定义一个名为default的条目来改变整个应用默认网络的设置:

services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres

networks:
  default:
    # Use a custom driver
    driver: custom-driver-1

使用预先存在的网络

networks:
  network1:
    name: my-pre-existing-network
    external: true

Last updated