拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 从Docker 容器中获取环境变量

从Docker 容器中获取环境变量

白鹭 - 2022-04-10 2177 0 2

一、概述

Docker 是一个容器化平台,它将应用程序及其所有依赖项打包在一起。理想情况下,这些应用程序需要特定的环境才能启动。在Linux 中,我们使用环境变量来满足这个要求。这些变量决定了应用程序的行为。

在本教程中,我们将学习检索在运行Docker 容器时设置的所有环境变量。就像有多种方法可以将环境变量传递给Docker 容器一样,一旦设置了这些变量,就有不同的方法可以获取这些变量。

在我们进一步讨论之前,让我们先了解一下环境变量的必要性。

2.了解Linux中的环境变量

环境变量是一组动态的键值对,可在系统范围内访问。这些变量可以帮助系统定位包,配置任何服务器的行为,甚至使bash 终端输出直观。

默认情况下,主机上的环境变量不会传递给Docker 容器。原因是Docker 容器应该与宿主环境隔离。所以,如果我们想在Docker 容器中使用环境,那么我们必须明确地设置它。

现在让我们研究从Docker 容器内部获取环境变量的不同方法。

3. 使用docker exec命令获取

出于演示的目的,让我们首先运行一个Alpine Docker 容器并将一些环境变量传递给它:

docker run -itd --env "my_env_var=tutorial" --name mycontainer alpine
 9de9045b5264d2de737a7ec6ba23c754f034ff4f35746317aeefcea605d46e84

在这里,我们在名为tutorial my_env_var mycontainer

现在让我们使用dockerdocker exec命令获取名为my_env_var的环境变量:

$ docker exec mycontainer /usr/bin/env
 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 HOSTNAME=9de9045b5264
 my_env_var=tutorial
 HOME=/root

在这里,我们在Docker 容器中执行/usr/bin/env实用程序。使用此实用程序,您可以查看在Docker 容器中设置的所有环境变量。请注意,我们的my_env_var也出现在输出中。

我们也可以使用下面的命令来达到类似的效果:

$ docker exec mycontainer /bin/sh -c /usr/bin/env
 HOSTNAME=9de9045b5264
 SHLVL=1
 HOME=/root
 my_env_var=tutorial
 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 PWD=/

**请注意,与之前的输出相比,环境变量更多。**之所以如此,是因为这次我们在/bin/sh二进制文件的帮助下执行命令。这个二进制文件隐式地设置了一些额外的环境变量。

此外,/bin/shshell 并非必须存在于所有Docker 映像中。例如,在包含/bin/bashshell的centos Docker 映像中,我们将检索环境变量使用以下_ 命令:

$ docker run -itd --env "container_type=centos" --name centos_container centos
 aee6f2718f18723906f7ab18ab9c37a539b6b2c737f588be71c56709948de9eb
 $ docker exec centos_container bash -c /usr/bin/env
 container_type=centos
 HOSTNAME=aee6f2718f18
 PWD=/
 HOME=/root
 SHLVL=1
 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 _=/usr/bin/env

我们还可以使用docker exec命令获取单个环境变量的值:

$ docker exec mycontainer printenv my_env_var
 tutorial

**printenv是另一个在Linux 中显示环境变量的命令行实用程序。**在这里,我们将环境变量名称my_env_var作为参数传递给printenv。这将打印my_env_var的值。

这种方法的缺点是Docker 容器必须处于运行状态才能检索环境变量。

4. 使用docker inspect命令获取

现在让我们研究另一种在Docker 容器处于停止状态时获取环境变量的方法。为此,我们将使用docker inspect命令。

docker inspect提供所有Docker 资源的详细信息。输出为JSON 格式。因此,我们可以根据我们的要求过滤输出。

让我们操作docker inspect命令只显示容器的环境变量:

$ docker inspect mycontainer --format "{{.Config.Env}}"
 [my_env_var=baeldung PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]

在这里,我们使用–format选项从docker inspect输出中过滤了环境变量。同样,my_env_var出现在输出中。

我们还可以使用docker inspect命令获取单个环境变量:

$ docker inspect mycontainer | jq -r '.[].Config.Env[]|select(match("^my_env_var"))|.[index("=")+1:]'
 baeldung

jq是一个轻量级的JSON 处理器,可以解析和转换JSON 数据。在这里,我们将docker inspect的JSON 输出传递给jq命令。然后它搜索my_env_var变量并通过将其拆分为“=”来显示其值。

请注意,我们也可以将容器ID 与docker execdocker inspect命令一起使用。

docker exec不同,docker inspect命令适用于已停止和正在运行的容器。

5. 结论

在本文中,我们学习了如何从Docker 容器中检索所有环境变量。我们首先讨论了环境变量在Linux 中的重要性。然后我们查看了docker execdocker inspect命令来检索环境变量。

docker exec方法有一些限制,而docker inspect命令在所有情况下都运行。


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *