如何将环境变量传递给 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+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告