簡體   English   中英

在 docker-compose.yml 的 env_files 中使用系統環境變量

[英]Use system environment variables in env_files in docker-compose.yml

我有一個名為 myenvfile.env 的 env 文件,它想從系統環境變量中定義。

.env

SYSTEM_ENV_VAR=prefix

myenvfile.env

MY_COMPOSED_ENV_VAR=${SYSTEM_ENV_VAR}_suffix

docker-compose.yml

version: '3.4'

services:
  myservice:
    env_file: 
      - env_files/myenvfile.env

但是,當我使用docker-compose up -d創建容器時,我查看了容器環境變量,並且MY_COMPOSED_ENV_VAR = "${SYSTEM_ENV_VAR}_suffix"而不是所需的"prefix_suffix"

我怎樣才能做到這一點? 謝謝

編輯:更多信息

例如,如果我在 Jenkins 作業中定義 SYSTEM_ENV_VAR,它在 Linux 和 Windows 中都有效。 但是如果我嘗試在 shell 中執行它,它在 Windows 中不起作用。

嘗試在SYSTEM_ENV_VAR docker-compose up命令之前聲明SYSTEM_ENV_VAR ,例如:

$ export SYSTEM_ENV_VAR=test
$ docker-compose up

您會看到它會正確展開。

發生這種情況是因為SYSTEM_ENV_VAR應該在SYSTEM_ENV_VAR docker-compose up命令之前聲明,因為它不會使用在容器創建瞬間(例如env_file鍵部分)中聲明的環境變量進行擴展,只有那些當docker-compose運行時已經可用。

這就是 Jenkins 工作在這種情況下起作用的原因。

.env 文件僅在 docker compose 開始時使用,方法是將 $VARIABLE 替換為 .env 文件中給出的值。 所以你不能指望它更新你的 myenvfile.env 文件的內容。 (檢查這個

相反,您應該在 docker-compose.yaml 中聲明新的環境變量,例如:

environment:
    - MY_COMPOSED_ENV_VAR=${SYSTEM_ENV_VAR}_suffix

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM