在容器的環境中設定環境變數

除非服務設定中有明確的項目使其發生,否則不會設定容器的環境。使用 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 中相同變數的值,或取自環境檔案。

更多資源