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


假設您正在使用一個 MySQL Docker 容器,並且您希望在執行容器時將環境變數傳遞給您的容器。將服務與配置隔離始終是一個好主意,並且始終建議為此目的使用環境變數。

主要有三種不同的方法可以將環境變數傳遞給我們的 Docker 容器。這些方法是使用 -e、--env-file 和 Dockerfile 內部的 ENV 指令。讓我們逐一檢查所有這些方法並提供示例。

使用 --env 或 -e 標誌傳遞環境變數

為了演示此示例,讓我們從 Dockerhub 中拉取 alpine 映象來使用它。

$ docker pull alpine:latest

我們可以使用 --env 或其簡寫版本 -e 透過 Docker run 命令以鍵值對的形式傳遞環境變數。Docker run 命令的語法如下:

$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

讓我們使用此語法來執行一個與 alpine 映象關聯的容器,並使用 -e 標誌傳遞我們的環境變數。

$ docker run -it --name=myalpine --env ENVVARIABLE1=foobar alpine:latest bash

此命令使用 -i 和 -t 選項以互動方式執行容器並開啟 bash。--name 選項用於為容器命名。--env 選項用於將名為 ENVVARIABLE 的環境變數及其值 foobar 傳遞給容器。

現在您可以訪問容器的 bash 了。在 bash 中,執行 env 命令。這將列出容器的所有環境變數。

# env

此外,如果您在本地機器上已經有一個環境變數,並且您想將此環境變數傳遞給容器,則可以省略變數的值。

$ docker run -it --name=myalpine --env VARIABLE2 alpine:latest env

這將直接設定名為 VARIABLE2 的環境變數,並從本地機器獲取其值。

使用 --env-file 選項

如果要將有限數量的環境變數傳遞給容器,可以使用先前的方法。但是,如果要傳遞的環境變數數量很大,則可以將變數儲存在以鍵值格式儲存在文字檔案中,並在 Docker run 命令中使用 --env-file 選項傳遞此檔案的名稱。它將自動讀取並從提到的檔案中匯入這些變數。

建立一個名為 env.txt 的檔案,內容如下。

ENV1 = VALUE1
ENV2 = VALUE2
ENV3 = VALUE3

現在,您可以使用以下命令建立一個名為 myalpine 的容器,並使用 --env-file 選項從該檔案傳遞環境變數。

$ docker run -it --name=myalpine --env-file env.txt alpine:latest env

請注意,該檔案必須存在於您在本地機器上執行此命令的同一路徑中。如果不在,請提及檔案的完整路徑。此命令將列出容器中的所有環境變數,您還將找到 env.txt 檔案中提到的變數。

使用 ENV Dockerfile 指令

如果您嘗試使用 Dockerfile 構建映象,則可以使用 ENV 指令傳遞環境變數。此指令的語法如下:

ENV <key> = <value> ...

您傳遞的值將成為 Dockerfile 中所有後續指令的環境變數。例如:

ENV MY_NAME="Jane Anniston"
ENV MY_PET=The\ Dog
ENV MY_CAT=TOMMY

類似於命令列解析,您將必須使用反斜槓轉義引號和空格。所有環境變數將在整個容器生命週期中持續存在。如果您想使用一個 ENV 指令只傳遞一個環境變數,則也可以省略等號。

總而言之,在本文中,我們看到了三種將環境變數傳遞給容器的不同方法。這些方法分別是 -e 或 --env 和 --env-file 選項,以及在使用 Dockerfile 建立映象時使用 ENV 指令。根據您的需求,您可以使用任何一種方法。此外,請確保不要傳遞任何敏感資訊,例如密碼、口令等,因為它們可能導致敏感資訊洩露,並可能影響您的整個應用程式或映象。

更新於: 2021年8月6日

1K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告