当前位置: 首页 > 科技观察

如何获取Docker容器中的环境变量_0

时间:2023-03-18 19:12:27 科技观察

大家好,我是北君。Docker是一个容器化平台,它将应用程序及其所有依赖项打包在一起。在大多数情况下,这些应用程序需要特定的环境才能启动。在Linux中,我们使用环境变量来满足这个要求。这些变量决定了应用程序的行为。在本文中,我们将学习如何检索在运行Docker容器时设置的所有环境变量。就像有多种方法可以将环境变量传递给Docker容器一样,一旦设置了这些变量,也有不同的方法来获取它们。让我们先了解一下环境变量的必要性。Linux中的环境变量环境变量是一组动态的键值对,可以在整个系统中访问。这些变量可以帮助系统定位包、配置任何服务器的行为,甚至使bash终端输出更直观。默认情况下,主机上的环境变量不会传递给Docker容器。原因是Docker容器应该与主机环境隔离。因此,如果我们想在Docker容器内使用环境,则必须明确设置它。现在让我们看一下从Docker容器内部获取环境变量的几种方法。使用dockerexec命令获取信息为了进行演示,让我们首先运行一个Docker容器并向其传递一些环境变量。dockerrun-itd--env"my_env_var=javanorth"--namemycontainer这里我们将my_env_var值javanorth传递到名为mycontainer的Docker容器中。现在让我们使用dockerexec命令获取名为my_env_var的环境变量。$dockerexecmycontainer/usr/bin/envPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=xxxxxxxxxmy_env_var=javanorthHOME=/root我们是运行Docker在容器中执行/usr/bin/env工具。使用此工具,您可以查看Docker容器内设置的所有环境变量。请注意,我们的my_env_var也出现在输出中。我们也可以使用下面的命令来获得类似的结果。$dockerexecmycontainer/bin/sh-c/usr/bin/envHOSTNAME=xxxxxxxxxSHLVL=1HOME=/rootmy_env_var=javanorthPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binPWD=/请注意,与之前的输出相比,这里有更多的环境变量。这是因为这次我们在/bin/sh二进制文件的帮助下执行命令。该二进制文件隐式设置了一些额外的环境变量。此外,/bin/shshell不必存在于所有Docker映像中。例如,在包含/bin/bashshell的centosDocker映像中,我们将使用以下命令来检索环境变量。$dockerrun-itd--env"container_type=centos"--namecentos_containercentos$dockerexeccentos_containerbash-c/usr/bin/envcontainer_type=centosHOSTNAME=xxxxxxxxPWD=/HOME=/rootSHLVL=1PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin_=/usr/bin/env我们也可以使用dockerexec命令获取单个环境变量的值。$dockerexecmycontainerprintenvmy_env_varjavanorthprintenv是另一个在Linux中显示环境变量的命令行工具。在这里,我们将环境变量my_env_var的名称作为参数传递给printenv。这将打印出my_env_var的值。这种方法的缺点是Docker容器必须处于运行状态才能检索环境变量。使用dockerinspect命令获取现在让我们看看另一种在Docker容器停止时获取环境变量的方法。我们将使用dockerinspect命令来实现这一点。dockerinspect提供有关所有Docker资源的详细信息。输出为JSON格式。因此,我们可以根据需要过滤输出。让我们操纵dockerinspect命令只显示容器的环境变量。$dockerinspectmycontainer--format"{{.Config.Env}}"[my_env_var=javanorthPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]在这里,我们使用-format选项过滤dockerinspect输出中的环境变量。此外,my_env_var出现在输出中。与dockerexec不同,dockerinspect命令适用于已停止和正在运行的容器。总结在本文中,我们学习了如何从Docker容器中检索所有环境变量。我们首先讨论了环境变量在Linux中的重要性。然后我们了解了dockerexec和dockerinspect命令来检索环境变量。dockerexec方法有一些限制,而dockerinspect命令适用于所有情况。