network_mode和使用Docker的网络有什么区别?



我试图使用网络"bridge"加入来自不同"docker-compose.yml"的服务,我得到以下错误:

Network-scoped alias is supported only for containers in user defined networks

搜索了一下,我来到这个参考链接::https://github.com/docker/compose/issues/3012

我把所有的东西都读了一遍又一遍,但我不能理解使用其中一个或另一个的真正原因。

谁能给我解释一下在实践中有什么不同?为什么当你使用network_mode和运行docker network inspect bridge所有容器正确链接出现?

:

services:
local-db:
image: mysql
networks:
default:
external:
name: bridge

:后

local-db:
image: mysql
network_mode: bridge

顶级networks部分以compose形式创建网络(或指定外部用户创建的网络),可由各种服务使用。然后,每个服务定义一个networks节来标识一个或多个用户创建的网络。该服务被自动配置为基于DNS的服务发现的网络别名。这是与服务建立网络的首选方法,默认情况下,这些网络中的每个都是一个桥接网络。

要跳过整个过程,您可以使用network_mode从组合管理网络切换到host,bridge,none,service:$namecontainer:$name。每一个都有独特的属性。

  • host根本没有网络命名空间,类似于在容器外启动进程。
  • bridge是docker总是创建的传统桥接网络,但禁用了一些功能,如基于DNS的服务发现。
  • none完全不组网,只定义环回接口。
  • service:$namecontainer:$name是将多个容器连接到同一个网络命名空间的特殊方式。kubernetes中的pod也可以做同样的事情,它对于网络故障排除或创建需要访问本地主机的sidecars非常有用。这只能在构建微服务时作为最后的手段,因为它破坏了独立扩展和部署容器的能力。

最新更新