如何将环境变量传递给 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 指令。根据您的需求,您可以使用任何一种方法。此外,请确保不要传递任何敏感信息,例如密码、口令等,因为它们可能导致敏感信息泄露,并可能影响您的整个应用程序或镜像。