假设您正在使用 MySQL Docker 容器,并且您希望在运行容器时将环境变量传递给您的容器。将服务与配置隔离始终是一个好主意,并且始终建议为此目的使用环境变量。
主要是,我们可以通过三种不同的方式将环境变量传递给我们的 Docker 容器。这些是通过使用 Dockerfile 中的 -e、--env-file 和 ENV 指令实现的。让我们通过示例一一查看所有这些方法。
为了演示这个例子,让我们通过从 Dockerhub 中拉取来使用 alpine 镜像。
$ docker pull alpine:latest
我们可以使用 --env 或其简写版本 -e 通过 Docker run 命令将环境变量作为键值对传递。Docker 运行命令的语法是 -
$ 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 的环境变量。
如果要向容器传递有限数量的环境变量,可以使用前面的方法。但是,如果要传递的环境变量数量较多,可以将变量以key-value格式存储在文本文件中,并使用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文件中提到的环境变量。
如果您尝试使用 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 指令。根据您的要求,您可以使用这些方法中的任何一种。另外,请确保您没有传递任何敏感信息,例如密码、密码等,因为它们可能会导致敏感信息的泄露并可能影响您的整个应用程序或图像。