在 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