在容器的環境中設定環境變數
除非服務設定中有明確的項目使其發生,否則不會設定容器的環境。使用 Compose,您可以透過 Compose 檔案,以兩種方式在容器中設定環境變數。
提示
請勿使用環境變數將敏感資訊(例如密碼)傳遞至您的容器。請改用密鑰。
使用 environment
屬性
您可以使用 compose.yml
中的 environment
屬性 直接在容器的環境中設定環境變數。
它支援清單和映射語法
services:
webapp:
environment:
DEBUG: "true"
等同於
services:
webapp:
environment:
- DEBUG=true
請參閱 environment
屬性 以取得更多使用方法的範例。
其他資訊
- 您可以選擇不設定值,並將環境變數從您的殼層直接傳遞到您的容器。其運作方式與
docker run -e VARIABLE ...
相同web: environment: - DEBUG
容器中 DEBUG
變數的值取自執行 Compose 的殼層中相同變數的值。請注意,在此情況下,如果殼層環境中的 DEBUG
變數未設定,則不會發出警告。
您也可以利用 插值。在以下範例中,結果與上述類似,但如果在殼層環境或專案目錄中的
.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.yml
檔案的位置。
重要
.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 中相同變數的值,或取自環境檔案。