当您链接容器时,Docker 会创建多个环境变量。Docker 会根据--link参数在目标容器中自动创建环境变量。它还从源容器中公开源自 Docker 的所有环境变量。这些包括来自以下方面的变量:

1.ENV在源容器的Dockerfile命令

2.-e,--env和--env-file在选择docker run 命令时,源容器开始

这些环境变量支持从目标容器内以编程方式发现与源容器相关的信息。

Docker_NAME为--link参数中列出的每个目标容器设置一个环境变量。例如,如果一个web名为dbvia的新容器 链接到一个名为via的数据库容器--link db:webdb,则 Docker 会WEBDB_NAME=/web/webdb在该web容器中创建一个变量。

Docker 还为源容器公开的每个端口定义了一组环境变量。每个变量都有一个唯一的前缀,格式如下:

_PORT__

此前缀中的组件是:

参数中指定的别名--link(例如,webdb)

暴露的数字

a是 TCP 或 UDP

Docker 使用这种前缀格式来定义三个不同的环境变量:

1.该prefix_ADDR变量包含来自 URL 的 IP 地址,例如WEBDB_PORT_5432_TCP_ADDR=172.17.0.82。

2.例如,该prefix_PORT变量仅包含来自 URL 的端口号WEBDB_PORT_5432_TCP_PORT=5432。

3.例如,该prefix_PROTO变量仅包含来自 URL 的协议WEBDB_PORT_5432_TCP_PROTO=tcp。

如果容器公开多个端口,则为每个端口定义一个环境变量集。这意味着,例如,如果一个容器公开 4 个端口,Docker 会创建 12 个环境变量,每个端口 3 个。

此外,Docker 创建了一个名为_PORT. 此变量包含源容器的第一个公开端口的 URL。“第一个”端口定义为具有最低编号的公开端口。例如,考虑WEBDB_PORT=tcp://172.17.0.82:5432变量。如果该端口同时用于 tcp 和 udp,则指定 tcp 之一。

最后,Docker 还将源容器中每个源自 Docker 的环境变量公开为目标中的环境变量。对于每个变量,Docker_ENV_在目标容器中创建一个变量。该变量的值设置为 Docker 在启动源容器时使用的值。

回到我们的数据库示例,您可以运行env 命令来列出指定容器的环境变量。

$ docker run --rm --name web2 --link db:db training/webapp env

可以看到 Docker 已经创建了一系列环境变量,其中db包含有关源容器的有用信息。每个变量都以 为前缀 DB_,它是根据alias您在上面指定的内容填充的。如果alias 是db1,则变量将以 为前缀DB1_。您可以使用这些环境变量来配置您的应用程序以连接到db容器上的数据库。连接是安全且私密的;只有链接的web容器才能与容器通信db。

关键词: Docker 云计算 核心 技术