我试图使用网络"bridge"
加入来自不同的服务"docker-compose.yml"
我收到以下错误:
Network-scoped alias is supported only for containers in user defined networks
搜索了一下,我找到了这个参考链接::https://github.com/docker/compose/issues/3012 https://github.com/docker/compose/issues/3012
我把所有内容都读了好几遍,但我无法理解使用其中之一的真正原因。
有人可以向我解释一下实践中有什么区别吗?
为什么当你使用network_mode
并运行docker network inspect bridge
所有正确链接的容器都会出现吗?
Before:
services:
local-db:
image: mysql
networks:
default:
external:
name: bridge
After:
local-db:
image: mysql
network_mode: bridge
顶层networks
部分创建可供各种服务使用的组合网络(或指定外部用户创建的网络)。然后每个服务定义一个networks
部分来识别一个或多个用户创建的要加入的网络。该服务会自动配置网络别名,以进行基于 DNS 的服务发现。这是设置服务网络的首选方法,默认情况下,每个网络都是桥接网络。
要跳过整个过程,您可以使用network_mode
从 compose 管理网络更改为host
, bridge
, none
, service:$name
, or container:$name
。其中每一个都具有独特的属性。
-
host
根本没有网络命名空间,类似于在容器外部启动进程。
-
bridge
是 docker 始终创建的传统桥接网络,但会禁用某些功能,例如基于 DNS 的服务发现。
-
none
根本没有网络,只定义了环回接口。
-
service:$name
and container:$name
是将多个容器连接到同一网络命名空间的特殊方法。 kubernetes 中的 pod 也完成同样的事情,它对于网络故障排除或创建需要访问 localhost 的 sidecar 时非常有用。这只能作为构建微服务时的最后手段,因为它破坏了独立扩展和部署容器的能力。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)