在 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
在此,服務 frontend
和 phpmyadmin
分別分配給 frontend
和 debug
配置檔案,因此僅當其各自的配置檔案啟用時才啟動。
沒有 profiles
屬性的服務始終啟用。在這種情況下,執行 docker compose up
將只啟動 backend
和 db
。
有效的配置檔名稱遵循 [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
檔案中,這將啟動 db
、backend
和 phpmyadmin
服務。
啟動多個配置檔案
您還可以啟用多個配置檔案,例如,使用 docker compose --profile frontend --profile debug up
,將啟用 frontend
和 debug
配置檔案。
可以透過傳遞多個 --profile
標誌或為 COMPOSE_PROFILES
環境變數指定一個逗號分隔列表來指定多個配置檔案
$ docker compose --profile frontend --profile debug up
$ COMPOSE_PROFILES=frontend,debug docker compose up
如果您想同時啟用所有配置檔案,可以執行 docker compose --profile "*"
。
自動啟動配置檔案和依賴項解析
當您在命令列上明確指定具有一個或多個已分配配置檔案的服務時,您無需手動啟用配置檔案,因為 Compose 將執行該服務,無論其配置檔案是否已啟用。這對於執行一次性服務或除錯工具非常有用。
只啟動指定的服務(以及透過 depends_on
宣告的任何依賴項)。除非以下情況,否則共享相同配置檔案的其他服務將不會啟動
- 它們也被明確指定,或者
- 配置檔案透過
--profile
或COMPOSE_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
檔案中,這將停止 db
、backend
和 phpmyadmin
服務。
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
只會停止backend
和db
。