Dockerfile内置的环境变量文档
我发生了一些有用的信息,它提示我有一个可以在Dockerfile中使用的内置环境变量$HOSTNAME
。在相当数量的搜索中,我无法找到这种内置变量的全面列表。 Dockerfile参考解释了如何使用ENV
命令来修改环境变量,但我现在没有必要这样做。我只是想知道默认情况下有什么可用的。有没有这方面的官方文件?我认为应该有,并在HOSTNAME
做一些搜索会指向我,但没有骰子。Dockerfile内置的环境变量文档
我只想知道默认情况下有什么可用的。
这取决于每个图像。您可以看到哪些变量是在每一个规定这样做:
docker run <image> env
或者:
docker inspect <image> -f '{{.Config.Env}}'
例如:
$ docker run ubuntu env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=71fc7d5db1f2
no_proxy=*.local, 169.254/16
HOME=/root
$ docker inspect ubuntu -f '{{.Config.Env}}'
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]
或者:
$ docker run node env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=42bbb311714a
no_proxy=*.local, 169.254/16
NPM_CONFIG_LOGLEVEL=info
NODE_VERSION=7.10.0
YARN_VERSION=0.24.4
HOME=/root
$ docker inspect node -f '{{.Config.Env}}'
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NPM_CONFIG_LOGLEVEL=info NODE_VERSION=7.10.0 YARN_VERSION=0.24.4]
PS:你可以在运行容器时做同样的事情:
docker inspect <container-id> -f '{{.Config.Env}}'
docker exec <container-id> env
我猜大部分发生在https://github.com/moby/moby/blob/34536c498d56a0c74fab08bd434407ac4707c971/container/container_unix.go#L57-L72。我不会说$HOSTNAME
是Docker特有的东西。在大多数Linux发行版中很常见,并且有很多脚本/ shell使用它。由于Docker没有运行一个完整的初始化系统,它可以在启动时设置主机名变量(比如Ubuntu上的/etc/init.d/hostname.sh),因此确保它为您设置。
如果您指定tty(-t
),它们看起来像设置了默认的$PATH
和$TERM
。除了可以指定自己的环境变量之外,当您使用--link
链接另一个容器(现在已弃用的功能)时,还会获得一堆可用的环境变量。见https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/#environment-variables。
好东西。偶然你知道在运行群集和/或使用覆盖网络时是否存在类似的变量?现在对我有用的一件事是节点的IP地址。它只是在一个环境变量中,这将是非常方便的。 – JimmyJames
我不知道Swarm是否有单独注射。您可能只需将内置于图像中的变量与实际运行输出进行比较,以查看注入的内容。如果没有深入研究代码,它可能很难找到(并且可能没有记录在任何地方,因为搜索已经显示)。 –
这有很大的帮助。作为一个笔记,我得到不同的跑步指令答案并检查阿尔卑斯山。运行命令给出3个值,检查只给出其中的一个。 – JimmyJames
“码头运行”版本运行一个新的容器来执行'env'。 Docker似乎运行提供HOSTNAME的新进程,这是docker run参数'--hostname'因为docker设置的一个特殊变量。我认为在图像中拥有该变量没有意义,因为它与基于相同图像的多个容器不同。 – Robert
您正在寻找我试图找到的关键。这些值是码头引擎只能知道的事情,因为它正在管理这些值。尽管我现在想要解决的问题基本上是人为设计的,但能够拥有默认提供的上下文是有用的。 – JimmyJames