有关docker --link参数的问题

时间:2015-01-08 09:38:11

标签: docker

众所周知,在一个带有docker守护程序的主机中,容器连接到docker0网桥,因此默认情况下容器可以互相访问。

那么--link选项的用途是什么?与direct access by ip方式有什么不同吗?

它实际上做了什么?

3 个答案:

答案 0 :(得分:3)

来自Docker docs

  

设置链接时,可以在源容器和收件人容器之间创建管道。然后,收件人可以访问有关源

的选择数据      

当链接两个容器时,Docker将在目标容器中设置一些环境变量,以便能够以编程方式发现与源容器相关的信息。

还有一些:

  

除了环境变量之外,Docker还将源容器的主机条目添加到/etc/hosts文件中。这是Web容器的一个条目:

因此,基本上--link创建了一组环境变量,并在/etc/hosts文件中添加了一些条目,以便于沟通。但是,仍然可以通过IP直接访问容器。

答案 1 :(得分:2)

使用--link选项创建容器时,Docker以两种方式将链接容器公开为新容器:

  • 它在/etc/hosts中创建一个条目,其中包含链接容器的IP和创建链接时给出的别名。
  • 它将一些信息公开为关于链接容器的环境变量。正如Docker documentation所示:
  

然后,Docker还将为源容器公开的每个端口定义一组环境变量。接下来的模式是:

<name>_PORT_<port>_<protocol> will contain a URL reference to the port. Where <name> is the alias name specified in the --link parameter (e.g. webdb), <port> is the port number being exposed, and <protocol> is either TCP or UDP. The format of the URL will be: <protocol>://<container_ip_address>:<port> (e.g. tcp://172.17.0.82:8080). This URL will then be split into the following 3 environment variables for convenience:
<name>_PORT_<port>_<protocol>_ADDR will contain just the IP address from the URL (e.g. WEBDB_PORT_8080_TCP_ADDR=172.17.0.82).
<name>_PORT_<port>_<protocol>_PORT will contain just the port number from the URL (e.g. WEBDB_PORT_8080_TCP_PORT=8080).
<name>_PORT_<port>_<protocol>_PROTO will contain just the protocol from the URL (e.g. WEBDB_PORT_8080_TCP_PROTO=tcp).

如果您通过IP访问没有区别,但使用链接可以设置容器忽略将由Docker守护程序分配的IP。请查看Docker documentation以获取更多信息。

答案 2 :(得分:0)

如果使用--icc=false选项启动泊坞窗,则默认情况下容器无法相互通信。您必须使用--link连接两个容器。