我遇到了一些有用的信息,这些信息使我了解到可以在Dockerfile中使用的内置环境变量$HOSTNAME
这一事实。在相当多的搜索中,我无法找到这些内置变量的完整列表。 Dockerfile参考解释了如何使用ENV
命令修改环境变量,但我现在不需要这样做。我只想知道默认情况下可用的内容。这有官方文件吗?我认为应该有,并且在HOSTNAME
上进行一些搜索会指向我,但没有骰子。
答案 0 :(得分:2)
我只想知道默认情况下可用的内容。
这取决于每个图像。您可以看到在每个变量中定义了哪些变量:
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
答案 1 :(得分:1)
我猜这大部分都发生在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($PATH
),它们似乎也设置了默认$TERM
和-t
。除了您可以自己指定的环境变量之外,当您使用--link
链接另一个容器(现在已弃用的功能)时,您还可以获得一组环境变量。请参阅https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/#environment-variables。