关于docker的问题——link参数

关于docker的问题——link参数,docker,Docker,正如我们所知,在一个具有docker守护进程的主机中,容器连接到docker0网桥,因此默认情况下容器可以相互访问 那么--link选项有什么用呢?通过ip直接访问的方式有什么不同吗 它实际上是做什么的?当您使用--link选项创建容器时,Docker通过两种方式将链接的容器公开到新容器中: 它在/etc/hosts中使用链接容器的IP和创建链接时给定的别名创建一个条目 它将一些信息作为链接容器的环境变量公开。如图所示: Docker还将为源容器公开的每个端口定义一组环境变量。其模式如下:

正如我们所知,在一个具有docker守护进程的主机中,容器连接到
docker0
网桥,因此默认情况下容器可以相互访问

那么
--link
选项有什么用呢?通过ip直接访问
的方式有什么不同吗


它实际上是做什么的?

当您使用
--link
选项创建容器时,Docker通过两种方式将链接的容器公开到新容器中:

  • 它在
    /etc/hosts
    中使用链接容器的IP和创建链接时给定的别名创建一个条目
  • 它将一些信息作为链接容器的环境变量公开。如图所示:
Docker还将为源容器公开的每个端口定义一组环境变量。其模式如下:

\u端口将包含对该端口的URL引用。其中是--link参数中指定的别名(例如webdb),是公开的端口号,是TCP或UDP。URL的格式为::/:(例如。tcp://172.17.0.82:8080). 为了方便起见,此URL将被拆分为以下3个环境变量:
_端口地址将只包含URL中的IP地址(例如WEBDB\u端口地址8080\u TCP\u地址=172.17.0.82)。
_端口号将只包含URL中的端口号(例如WEBDB\U端口号8080\U TCP\U端口号=8080)。
_端口协议将只包含URL中的协议(例如WEBDB\u端口协议8080\u TCP\u协议=TCP)。
如果您通过IP访问,则没有区别,但是使用链接可以让设置容器忽略Docker守护程序将分配的IP。查看更多信息。

来自:

设置链接时,将在源容器和收件人容器之间创建导管。然后,收件人可以访问有关源的选定数据

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

还有一些:

除了环境变量外,Docker还将源容器的主机条目添加到
/etc/hosts
文件中。以下是web容器的条目:


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

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

<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).