覆盖docker网络中--link和--alias之间的区别?

Posted

技术标签:

【中文标题】覆盖docker网络中--link和--alias之间的区别?【英文标题】:Difference between --link and --alias in overlay docker network? 【发布时间】:2016-07-03 02:43:03 【问题描述】:

我正在阅读this Docker 0.10.3 官方文档(此时它还在一个分支中),上面写着:

--net-alias=ALIAS

除了上述的 --name 之外,一个容器是通过一个或多个配置的 --net-alias(或 docker network connect 命令中的 --alias)在用户定义的网络中发现的。嵌入式 DNS 服务器维护所有容器别名与其在特定用户定义网络上的 IP 地址之间的映射。通过使用 docker network connect 命令中的 --alias 选项,一个容器可以在不同的网络中拥有不同的别名。

--link=CONTAINER_NAME:ALIAS

在运行容器时使用此选项会为嵌入式 DNS 提供一个名为 ALIAS 的额外条目,该条目指向由 CONTAINER_NAME 标识的容器的 IP 地址。使用 --link 时,嵌入式 DNS 将保证本地化查找结果仅在使用 --link 的容器上。这让新容器内的进程无需知道其名称或 IP 即可连接到容器。

来自一个容器的网络别名实际上是来自同一网络中的第二个容器的链接吗?

【问题讨论】:

【参考方案1】:

--net-alias--link 有两个区别:

    使用--net-alias,只有在同一网络上的一个容器才能访问另一个容器。也就是说,除了--net-alias foo--net-alias bar之外,在用docker network create foobar_net创建网络后,还需要用--net foobar_net启动这两个容器。 使用--net-alias foo,同一网络中的所有 容器可以使用其别名foo 访问容器。使用--link只有链接的容器可以使用名称foo 访问容器。

从历史上看,--link 是在 libnetwork 和所有与网络相关的功能之前创建的。在libnetwork之前,所有容器都运行在同一个网络bridge,而--link只是给/etc/hosts加了名字。然后,添加了自定义网络和the behavior of --link in user-defined networks was changed。

有关--link 的更多信息,另请参阅Legacy container links。

【讨论】:

完美答案!不知道单个链接和别名之间的区别,以便其他容器可以访问它。

以上是关于覆盖docker网络中--link和--alias之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

docker 容器互联,Docker Compose

docker互联机制实现便捷互访

Docker网络

Docker 网络详解之使用 --link 实现容器间通过容器名称互联

第140天学习打卡(Docker --link 自定义网络 网络连通 部署Redis集群 发布SpringBoot镜像)

一些好用的 alias 命令