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

容器的環境變數在服務配置中沒有明確條目之前是不會設定的。使用 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 中或環境檔案中的同名變數的值。

更多資源