網路頂層元素

網路允許服務之間互相通訊。預設情況下,Compose 會為您的應用程式設定單一網路。服務的每個容器都會加入預設網路,並且可以被該網路上的其他容器存取,也可以透過服務名稱找到。頂層 `networks` 元素允許您設定可在多個服務之間重複使用的具名網路。

若要在多個服務之間使用網路,您必須使用 `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:
    # 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: true

enable_ipv6(啟用 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(IP 位址管理)

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 中的網路