在容器的環境中設定環境變數
在服務配置中沒有明確的條目之前,容器的環境不會被設定。使用 Compose,您可以使用 Compose 檔案在容器中設定環境變數,有兩種方法。
提示
不要使用環境變數將敏感資訊(如密碼)傳遞到容器中。請改用 secrets。
使用 environment
屬性
您可以使用 compose.yml
檔案中的 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
變數,則不會發出警告。
您還可以利用 插值。在以下示例中,結果與上面類似,但 Compose 會在 shell 環境或專案目錄中的
.env
檔案中未設定DEBUG
變數時發出警告。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.yml
檔案的位置。
重要
.env
檔案中的插值是 Docker Compose CLI 功能。執行
docker run --env-file ...
時不支援它。
其他資訊
- 如果指定了多個檔案,則按順序評估它們,並且可以覆蓋之前檔案中設定的值。
- 此外,由於
.env
檔案支援 插值,因此可以將它們與environment
設定的值結合使用。 - 從 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 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 中的相同變數的值。