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

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

更多資源