網路頂級元素

網路允許服務相互通訊。預設情況下,Compose 為您的應用程式設定單個網路。每個服務的容器都加入預設網路,並且可以與該網路上的其他容器通訊,並且可以透過服務的名稱發現。

要跨多個服務使用網路,必須透過在 `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.projectcom.docker.compose.network 標籤。

name

name 為網路設定自定義名稱。名稱欄位可用於引用包含特殊字元的網路。名稱按原樣使用,不會與專案名稱限定範圍。

networks:
  network1:
    name: my-app-net

它還可以與 external 屬性結合使用,以定義 Compose 應該檢索的平臺網路,通常透過使用引數,這樣 Compose 檔案就不需要硬編碼執行時特定的值

networks:
  network1:
    external: true
    name: "${NETWORK_ID}"

其他資源

有關更多示例,請參閱 Compose 中的網路