在 Compose 中使用設定檔 (Profiles)

設定檔 (Profiles) 透過選擇性地啟動服務,協助您針對不同的環境或使用情境調整 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

有效的設定檔名稱須符合 regex 格式 [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

參考資訊

設定檔 (profiles)

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.