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