覆盖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 网络详解之使用 --link 实现容器间通过容器名称互联
第140天学习打卡(Docker --link 自定义网络 网络连通 部署Redis集群 发布SpringBoot镜像)