在 Docker 中向容器傳遞環境變數

Isaac Tony 2023年1月30日
  1. 使用 -e-env 標籤將環境變數傳遞給 Docker 中的容器
  2. 使用匯出命令將環境變數傳遞給 Docker 中的容器
  3. 使用 -env 檔案將環境變數傳遞給 Docker 中的容器
在 Docker 中向容器傳遞環境變數

本教程將介紹在 Docker 中將環境變數傳遞給容器的方法。

使用 -e-env 標籤將環境變數傳遞給 Docker 中的容器

我們將首先了解如何建立環境變數並將它們傳遞給容器。我們將首先使用以下命令從 Docker 登錄檔中提取我們將使用的映像。

$ docker pull ubuntu~$ docker pull ubuntu

輸出:

Using default tag: latest
latest: Pulling from library/ubuntu
08c01a0ec47e: Pull complete
Digest: sha256:669e010b58baf5beb2836b253c1fd5768333f0d1dbcb834f7c07a4dc93f474be
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

我們將使用 -e 標籤,-env 的簡寫形式,可以通過在終端中執行命令 docker run -help 檢查其用法。這個引數允許我們建立多個環境變數的鍵值對來傳遞給容器。

這是我們如何建立單個環境變數並將其傳遞給我們使用 Ubuntu 映像建立的容器的方法。

$ docker run -it -e DEMO=sample_variable ubuntu bash

輸出:

root@3a20bc21d3c8:/# echo $DEMO
sample_variable

我們還可以使用 -e 的多個標籤來建立環境變數,只需在建立新容器時將它們與執行命令連結起來,如下所示。

$ docker run -it -e DEMO1=sample_variable1 -e DEMO2=sample_variable2 ubuntu bash

一旦我們傳遞了這兩個環境變數,我們就可以使用下面的命令訪問它們的值。我們將變數一命名為 DEMO1,我們可以在下面訪問它的值。

root@9eee00d7ab01:/# echo $DEMO1

輸出:

sample_variable1

同樣,我們也可以列印出變數二,如下所示。

root@9eee00d7ab01:/# echo $DEMO2

輸出:

sample_variable2

使用匯出命令將環境變數傳遞給 Docker 中的容器

或者,我們也可以通過使用 export 命令避免將環境變數連結在一起。此命令是 Linux bash shell 的內建實用工具,也可與 WSL 一起使用。

它允許我們建立環境變數並將其傳遞給子程序,而不會影響預先存在的變數。我們將從建立環境變數開始,如下所示。

isaac@DESKTOP-HV44HT6:~$ export MYSQL_USER=isaactonyloi
isaac@DESKTOP-HV44HT6:~$ export MYSQL_PASS=fakepassword

一旦我們建立了環境變數,我們就可以將它們傳遞給我們正在建立的容器,如下所示。

$ docker run -it -e MYSQL_USER -e MYSQL_PASS ubuntu bash

然後,我們可以使用命令 echo 命令訪問和顯示變數的相應值,如下所示。

root@5b4dae06932d:/# echo $MYSQL_USER
isaactonyloi

使用 -env 檔案將環境變數傳遞給 Docker 中的容器

為你提供更多除錯空間的更好方法是改用 Docker 分解檔案。這意味著我們現在不必在啟動 docker 容器時直接傳遞環境變數。

這種方法意味著我們必須建立一個包含環境變數的外部 .env 檔案。我們可以使用下面的 Linux 命令在我們的主目錄中建立這個檔案。

此命令選擇進入 Linux vi 編輯器,建立我們的環境變數列表。

$ vi env.list

在 vi 編輯器中,我們將建立環境變數作為鍵值對,其中鍵為大寫,其各自的值為小寫。我們將退出,通過按完整的冒號並輸入 wq command 來儲存變數。

MYSQL_USER=isaactonyloi
MYSQL_PASS=fakepassword

wq

我們可以使用 ls 命令來確認檔案 env.list 是否已成功儲存。這應該返回該目錄中的檔案列表,其中列出了 env.list

我們還可以使用 cat 命令檢視該列表中的條目,如下所示。

$ cat env.list

輸出:

MYSQL_USER=isaactonyloi
MYSQL_PASS=fakepassword

一旦我們有了它,我們現在可以執行 ubuntu 映像來建立新容器並指定我們儲存變數的路徑以將它們傳入。

在本例中,env.list 檔案儲存在主目錄中。因此,如果你的目錄位於另一個目錄中,你的路徑可能看起來不同。

我們應該執行命令將這些環境變數傳遞給新容器。

$ docker run -it --env-file ./env.list ubuntu bash

我們可以通過列印變數來驗證我們是否已成功將環境變數傳遞給容器,如下所示。

/# echo $MYSQL_USER
/# echo $MYSQL_PASS

輸出:

Isaactonyloi
fakepassword

代替之前的方法,我們可以建立一個包含我們想要傳遞的所有環境變數的模板檔案。如果我們希望進行任何更改,這使我們可以輕鬆地覆蓋在此檔案中建立的環境變數。

作者: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn