在容器環境中設定環境變數
容器的環境變數在服務配置中沒有明確條目之前是不會設定的。使用 Compose,您可以透過兩種方式在 Compose 檔案中設定容器的環境變數。
提示不要使用環境變數向容器傳遞敏感資訊,如密碼。請改用密文。
使用 environment
屬性
您可以使用 compose.yaml
中的environment
屬性直接在容器環境中設定環境變數。
它支援列表和對映語法
services:
webapp:
environment:
DEBUG: "true"
等效於
services:
webapp:
environment:
- DEBUG=true
有關如何使用它的更多示例,請參閱environment
屬性。
附加資訊
- 您可以選擇不設定值,而是直接將 shell 中的環境變數傳遞給容器。它的工作方式與
docker run -e VARIABLE ...
相同。web: environment: - DEBUG
容器中 DEBUG
變數的值取自執行 Compose 的 shell 中同名變數的值。請注意,在這種情況下,如果 shell 環境中未設定 DEBUG
變數,則不會發出警告。
您還可以利用插值。在以下示例中,結果與上述類似,但如果 shell 環境中或專案目錄中的
.env
檔案中未設定DEBUG
變數,Compose 將發出警告。web: environment: - DEBUG=${DEBUG}
使用 env_file
屬性
容器的環境也可以使用.env
檔案和env_file
屬性來設定。
services:
webapp:
env_file: "webapp.env"
使用 .env
檔案可以讓您使用與普通 docker run --env-file ...
命令相同的檔案,或者在多個服務中共享相同的 .env
檔案,而無需重複冗長的 environment
YAML 塊。
它還可以幫助您將環境變數與主配置檔案分開,提供一種更有組織、更安全的方式來管理敏感資訊,因為您不需要將 .env
檔案放置在專案目錄的根目錄中。
env_file
屬性還允許您在 Compose 應用程式中使用多個 .env
檔案。
在 env_file
屬性中指定的 .env
檔案路徑是相對於 compose.yaml
檔案位置的。
重要
.env
檔案中的插值是 Docker Compose CLI 功能。當執行
docker run --env-file ...
時,不支援此功能。
附加資訊
- 如果指定了多個檔案,它們將按順序評估,並可以覆蓋先前檔案中設定的值。
- 從 Docker Compose 2.24.0 版本開始,您可以使用
required
欄位將env_file
屬性定義的.env
檔案設定為可選。當required
設定為false
且.env
檔案缺失時,Compose 會默默地忽略該條目。env_file: - path: ./default.env required: true # default - path: ./override.env required: false
- 從 Docker Compose 2.30.0 版本開始,您可以使用
format
屬性為env_file
使用替代檔案格式。有關更多資訊,請參閱format
。 - 您可以使用
docker compose run -e
從命令列覆蓋.env
檔案中的值。
使用 docker compose run --env
設定環境變數
與 docker run --env
類似,您可以使用 docker compose run --env
或其簡寫形式 docker compose run -e
臨時設定環境變數。
$ docker compose run -e DEBUG=1 web python console.py
附加資訊
您還可以透過不賦值來從 shell 或環境檔案中傳遞變數。
$ docker compose run -e DEBUG web python console.py
容器中 DEBUG
變數的值取自執行 Compose 的 shell 中或環境檔案中的同名變數的值。