在 Compose 中使用配置檔案

配置檔案透過選擇性地啟用服務來幫助您根據不同的環境或用例調整 Compose 應用程式。服務可以分配給一個或多個配置檔案;未分配的服務預設啟動/停止,而分配的服務僅在其配置檔案處於活動狀態時才啟動/停止。這種設定意味著特定服務(例如用於除錯或開發的服務)可以包含在一個 compose.yml 檔案中,並且僅在需要時啟用。

為服務分配配置檔案

服務透過 profiles 屬性與配置檔案關聯,該屬性接受一個配置檔名稱陣列

services:
  frontend:
    image: frontend
    profiles: [frontend]

  phpmyadmin:
    image: phpmyadmin
    depends_on: [db]
    profiles: [debug]

  backend:
    image: backend

  db:
    image: mysql

在此,服務 frontendphpmyadmin 分別分配給 frontenddebug 配置檔案,因此僅當其各自的配置檔案啟用時才啟動。

沒有 profiles 屬性的服務始終啟用。在這種情況下,執行 docker compose up 將只啟動 backenddb

有效的配置檔名稱遵循 [a-zA-Z0-9][a-zA-Z0-9_.-]+ 的正則表示式格式。

提示

您的應用程式的核心服務不應分配 profiles,以便它們始終啟用並自動啟動。

啟動特定配置檔案

要啟動特定配置檔案,請提供 --profile 命令列選項或使用 COMPOSE_PROFILES 環境變數

$ docker compose --profile debug up
$ COMPOSE_PROFILES=debug docker compose up

這兩個命令都啟動了啟用 debug 配置檔案的服務。在之前的 compose.yaml 檔案中,這將啟動 dbbackendphpmyadmin 服務。

啟動多個配置檔案

您還可以啟用多個配置檔案,例如,使用 docker compose --profile frontend --profile debug up,將啟用 frontenddebug 配置檔案。

可以透過傳遞多個 --profile 標誌或為 COMPOSE_PROFILES 環境變數指定一個逗號分隔列表來指定多個配置檔案

$ docker compose --profile frontend --profile debug up
$ COMPOSE_PROFILES=frontend,debug docker compose up

如果您想同時啟用所有配置檔案,可以執行 docker compose --profile "*"

自動啟動配置檔案和依賴項解析

當您在命令列上明確指定具有一個或多個已分配配置檔案的服務時,您無需手動啟用配置檔案,因為 Compose 將執行該服務,無論其配置檔案是否已啟用。這對於執行一次性服務或除錯工具非常有用。

只啟動指定的服務(以及透過 depends_on 宣告的任何依賴項)。除非以下情況,否則共享相同配置檔案的其他服務將不會啟動

  • 它們也被明確指定,或者
  • 配置檔案透過 --profileCOMPOSE_PROFILES 明確啟用。

當在命令列上明確指定具有已分配 profiles 的服務時,其配置檔案會自動啟動,因此您無需手動啟動它們。這可用於一次性服務和除錯工具。例如,考慮以下配置

services:
  backend:
    image: backend

  db:
    image: mysql

  db-migrations:
    image: backend
    command: myapp migrate
    depends_on:
      - db
    profiles:
      - tools
# Only start backend and db (no profiles involved)
$ docker compose up -d

# Run the db-migrations service without manually enabling the 'tools' profile
$ docker compose run db-migrations

在此示例中,即使 db-migrations 分配給 tools 配置檔案,它也會執行,因為它被明確指定。db 服務也會自動啟動,因為它在 depends_on 中列出。

如果目標服務具有也受配置檔案保護的依賴項,您必須確保這些依賴項要麼

  • 在同一個配置檔案中
  • 單獨啟動
  • 未分配任何配置檔案,因此始終啟用

停止具有特定配置檔案的應用程式和服務

與啟動特定配置檔案一樣,您可以使用 --profile 命令列選項或使用 COMPOSE_PROFILES 環境變數

$ docker compose --profile debug down
$ COMPOSE_PROFILES=debug docker compose down

這兩個命令都停止並刪除具有 debug 配置檔案和服務(沒有配置檔案)的服務。在以下 compose.yaml 檔案中,這將停止 dbbackendphpmyadmin 服務。

services:
  frontend:
    image: frontend
    profiles: [frontend]

  phpmyadmin:
    image: phpmyadmin
    depends_on: [db]
    profiles: [debug]

  backend:
    image: backend

  db:
    image: mysql

如果您只想停止 phpmyadmin 服務,可以執行

$ docker compose down phpmyadmin

$ docker compose stop phpmyadmin
注意

執行 docker compose down 只會停止 backenddb

參考資訊

配置檔案