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

系统 Linux
在这篇文章中,我们学习了如何从 Docker 容器中检索所有的环境变量。我们首先讨论了Linux中环境变量的重要性。然后我们了解了 docker exec 和 docker inspect 命令来检索环境变量。

大家好,我是指北君。

Docker是一个容器化的平台,它将一个应用程序连同其所有的依赖关系打包。大部分情况下,这些应用程序需要一个特定的环境来启动。在Linux中,我们使用环境变量来满足这一要求。这些变量决定了应用程序的行为。

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

首先让我们了解一下环境变量的必要性。

Linux 中的环境变量

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

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

现在让我们来看看从 Docker 容器内部获取环境变量的几种方法。

使用 docker exec 命令获取信息

为了演示,让我们首先运行一个 Docker 容器,并向它传递一些环境变量。

docker run -itd --env "my_env_var=javanorth" --name mycontainer 

在这里,我们将 my_env_var 的值 javanorth 传递到名为 mycontainer 的 Docker 容器中。

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

$ docker exec mycontainer /usr/bin/env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=xxxxxxxxx
my_env_var=javanorth
HOME=/root

我们正在 Docker 容器内执行 /usr/bin/env 工具。使用这个工具,你可以查看 Docker 容器内设置的所有环境变量。注意,我们的 my_env_var 也出现在输出中。

我们还可以使用下面的命令来实现类似的结果。

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

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

另外,/bin/sh shell并不是所有的 Docker 镜像都必须存在的。例如,在包含 /bin/bash shell的 centos Docker 镜像中,我们将使用以下命令来检索环境变量。

$ docker run -itd --env "container_type=centos" --name centos_container centos

$ docker exec centos_container bash -c /usr/bin/env
container_type=centos
HOSTNAME=xxxxxxxx
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
javanorth

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

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

使用 docker inspect 命令获取

现在让我们来看看另一种在 Docker 容器处于停止状态时获取环境变量的方法。我们将使用docker inspect 命令来实现这一目的。

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

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

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

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

与docker exec不同的是,docker inspect命令对停止和运行的容器都有效。

总结

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

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

责任编辑:武晓燕 来源: Java技术指北
相关推荐

2020-08-05 09:48:20

Docker容器工具

2023-12-12 13:22:00

LinuxDocker容器

2022-10-14 13:33:35

2021-06-18 08:43:20

环境变量Linux

2010-01-18 14:47:42

VB.NET获取环境变

2020-08-17 07:38:47

Linux系统

2011-06-14 09:21:55

Linux Qt 环境变量

2019-05-30 10:20:10

Linux环境变量命令

2021-03-04 23:11:59

环境变量Python

2010-10-11 09:41:23

MySQL环境变量

2009-06-29 15:06:23

环境变量配置Java

2010-03-26 12:50:02

CentOS系统

2023-11-01 13:40:25

GolangGo

2021-02-15 15:52:27

Linux环境变量命令

2012-09-18 01:22:33

Java环境变量Classpath

2017-03-07 19:30:54

Windows 7Windowsjava

2021-11-18 15:54:17

FreeDOSLinux

2009-12-25 09:44:59

redhatPATH设置环境变量

2011-08-22 15:06:19

linux环境变量

2011-12-21 10:46:17

Java
点赞
收藏

51CTO技术栈公众号