如何將環境變數傳遞給 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 指令。根據您的需求,您可以使用任何一種方法。此外,請確保不要傳遞任何敏感資訊,例如密碼、口令等,因為它們可能導致敏感資訊洩露,並可能影響您的整個應用程式或映象。