链接容器中<alias> _PORT_ <port> _ <proto> _ * env vars的含义和用法</proto> </port> </alias>

时间:2015-04-10 08:54:59

标签: docker

我可以使用--link name:alias参数链接docker容器,该参数将在容器中创建多个环境变量,例如ALIAS_PORT_1234_TCP_ADDRALIAS_PORT_1234_TCP_PORTALIAS_PORT_1234_TCP_PROTO

ALIAS_PORT_1234_TCP_ADDR var可用于检测链接容器的IP(即使建议使用etc/hosts条目,因为它将在容器重启时更新,而env变量不会改变。)

但对我而言,我可以使用这些其他两个变量并不明显。在给定示例中,ALIAS_PORT_1234_TCP_ADDR将为1234ALIAS_PORT_1234_TCP_PROTO将为tcp - 但这两个值已经在变量的名称中。

有人可以告诉我这些变量的意图和用途吗?

是否存在链接容器的公开端口与EXPOSE声明的端口不同的情况?我知道我可以通过-p将容器端口绑定到主机但我的理解是,这对链接容器没有影响,因为它们将直接与链接容器的端口对话,无需与主机(这将更加困难,因为在容器内获取主机的IP并不容易)。

另外,为什么端口协议会发生变化或需要检测?

2 个答案:

答案 0 :(得分:0)

  

是否存在链接容器的公开端口与其使用EXPORT声明的端口不同的方案

如果您的意思是EXPOSE,那么主要区别在于没有链接,您需要将端口发布到主机,以便其他容器发现它并与第一个导出其容器的容器进行通信端口。

但是使用--links,您不必使用-P or -p <hostport>:<containerport>,您可以发现第一个容器使用环境变量公开的端口。主机不需要使用其中一个端口回送到第一个容器端口。

参见&#34; Communication between linked docker containers&#34;作为一个使用所有三个环境变量的例子。

如果要调用从Container_2调用URL udp://Container_1_IP:5043,则需要--link设置所有3个变量才能使用正确的IP,端口和协议。

OP评论:

  

当然,我可以构建&#34; udp://Container_1_IP:5043&#34;来自env vars - 但我看不出,为什么我需要这样做:

$ALIAS_PORT_5043_UDP_PROTO:// $ALIAS_PORT_5043_UDP_ADDR:$ALIAS_PORT_5043_UDP_POR‌​T

确实如此,但没有考虑 port range PORT_STARTPORT_END环境变量)

答案 1 :(得分:0)

我自己很想知道这件事。我认为环境变量主要只是一种文档形式;您可以调用env来发现容器暴露的端口。我想一个用例可能是从链接容器中的环境中解析变量的名称;这将允许您在运行时选择要使用的端口或端口。 (即使这样,拥有诸如ALIAS_PORTS之类的变量而不是具有已经编码的值的名称似乎更有意义。

此外,我认为随着Docker网络功能的发展,这可能会在未来发生变化。