如何將環境變數傳遞給 Docker 容器?

banq發表於2021-09-16

要將環境變數傳遞給容器,我們首先必須設定它。
假設我們要為資料庫使用者設定變數,並且我們計劃將該變數用於不同的容器。我們可以設定一個名為 DB_USER 的變數,它適用於使用任何型別資料庫的任何容器。假設 DB_USER 的值為 TechRepublic。要設定該變數,我們將發出以下命令:
export DB_USER=TechRepublic
要驗證變數是否已設定,請發出以下命令:
echo $DB_USER
您應該會在終端中看到 TechRepublic。就是這樣,您已經設定了變數。讓我們更進一步(為了示例),並將密碼設定為環境變數。您不會在生產中執行此操作,但這是說明如何執行此操作的好方法。
 

如何將變數傳遞給容器
現在您瞭解了環境變數的工作原理,您可以瞭解如何輕鬆地將它們傳遞給您的容器。首先,我將演示如何從 docker 命令列執行此操作,然後使用 .env 檔案。
與在 Linux 中使用環境變數不同,您不能在主機上設定它們,然後以與在主機系統中相同的方式將這些設定的變數傳遞給容器。換句話說,例如:
docker run --name postgresql -e $DB_PWORD -e $DB_USER -d postgres

如果您嘗試這樣部署容器,它將執行但立即退出。為什麼?因為與 Linux 系統不同,您幾乎可以根據自己的喜好定義環境變數,容器映像需要某些變數。例如,PostgreSQL 資料庫不能使用 DB_PWORD 或 DB_USER,因為它需要 POSTGRES_PASSWORD 和 POSTGRES_USER。為此,您可以使用以下命令在 Linux 主機上設定這些環境變數:

export POSTGRES_PASSWORD=t3chr3public
export POSTGRES_USER=TechRepublic


好的,現在我們可以執行相同的命令:
docker run --name postgresql -e POSTGRES_PASSWORD -e POSTGRES_USER -d postgres

該命令成功執行,容器將保持執行。
 

如何使用 .env 檔案傳遞​​變數
如上所述傳遞環境變數的問題之一是它們存在於記憶體中(直到您使用unset命令取消設定它們)。為了避免這種情況,我們使用環境變數檔案。
讓我們堅持使用我們上面使用的相同變數。使用以下命令建立一個新的 .env 檔案:
nano .env
加入以下內容:

POSTGRES_PASSWORD=t3chr3public
POSTGRES_USER=TechRepublic


現在可以執行:
docker run --name postgresql --env-file .env -d postgres

 

相關文章