如何将环境变量传递给 Docker 容器?
假设您正在使用 MySQL Docker 容器,并且希望在容器运行时将环境变量传递给容器。将服务与配置隔离始终是一个好主意,并且始终建议为此使用环境变量。
主要有三种不同的方法可以将环境变量传递给 Docker 容器。它们是使用 Dockerfile 中的 -e、--env-file 和 ENV 指令。让我们通过示例逐一检查所有这些方法。
使用 --env 或 -e 参数传递环境变量
为了演示此示例,让我们从 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 的环境变量的值来设置它。
使用 --env-file 选项
如果您想将有限数量的环境变量传递给容器,可以使用前面的方法。但是,如果要传递的环境变量数量很大,您可以将变量以键值格式存储在文本文件中,并在 Docker 运行命令中使用 --env-file 选项传递该文件的名称。Docker 会自动从该文件中读取并导入这些变量。
创建一个名为 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 指令。您可以根据需要使用其中任何一种方法。此外,请确保您没有传递任何敏感信息,例如密码、密码短语等,因为它们可能会导致敏感信息泄露,并可能影响您的整个应用程序或图像。

