因为在同一台服务器上部署2套docker emqx服务,总是提示“Protocol 'ekka':register/lister error:eaddrinuse”,就因为network_mode配置的是host,怎么隐射都是同样的错误,很是无奈,没想到!!!!!,host模式不需要端口隐射
在 docker-compose 中,network_mode 用于指定容器的网络模式,不同的网络模式决定了容器如何与外部网络以及其他容器进行通信。以下是 docker-compose 中 network_mode 支持的常见选项及其差别:
1. bridge(默认模式)
- 说明:这是默认的网络模式。当使用
bridge模式时,Docker 会创建一个虚拟的网桥(通常命名为docker0),容器会连接到这个网桥上,并从网桥的 IP 地址段中获取一个私有 IP 地址。容器可以通过宿主机的网络接口与外部网络通信,同时也可以通过 IP 地址与同一网桥上的其他容器通信。 - 示例:
收起
yaml
version: '3'
services:
myservice:
image: myimage
network_mode: bridge
- 优缺点:
- 优点:容器之间相互隔离,安全性较高;容器可以方便地与外部网络通信。
- 缺点:需要进行端口映射才能让外部网络访问容器内的服务;容器之间通信需要知道对方的 IP 地址。
2. host
- 说明:使用
host模式时,容器会直接使用宿主机的网络栈,即容器与宿主机共享网络接口。容器的 IP 地址就是宿主机的 IP 地址,容器内监听的端口会直接暴露在宿主机上,不需要进行端口映射。 - 示例:
收起
yaml
version: '3'
services:
myservice:
image: myimage
network_mode: host
- 优缺点:
- 优点:网络性能较好,因为不需要进行网络地址转换(NAT);容器可以直接使用宿主机的网络资源,无需进行端口映射。
- 缺点:容器之间的网络隔离性较差,一个容器的网络配置可能会影响其他容器;安全性较低,因为容器直接使用宿主机的网络接口。
3. none
- 说明:
none模式会禁用容器的网络功能,容器没有网络接口,无法与外部网络或其他容器进行通信。这种模式通常用于对网络访问有严格限制的场景,或者需要手动配置网络的情况。 - 示例:
收起
yaml
version: '3'
services:
myservice:
image: myimage
network_mode: none
- 优缺点:
- 优点:提供了最高级别的网络隔离,容器无法与外部网络或其他容器通信,安全性极高。
- 缺点:容器的网络功能完全被禁用,需要手动配置网络才能使其正常工作,使用起来比较复杂。
4. service:[service name]
- 说明:这种模式允许一个容器加入另一个服务的网络命名空间,使得这两个容器可以共享相同的网络栈。这样,它们可以通过
localhost相互通信,就像在同一个网络环境中一样。 - 示例:
收起
yaml
version: '3'
services:
service1:
image: myimage1
service2:
image: myimage2
network_mode: service:service1
- 优缺点:
- 优点:方便容器之间的通信,不需要知道对方的 IP 地址,通过
localhost就可以进行通信;可以实现容器之间的紧密耦合。 - 缺点:容器之间的网络隔离性较差,一个容器的网络配置可能会影响另一个容器;对服务的依赖较强,如果被依赖的服务出现问题,可能会影响到其他容器。
- 优点:方便容器之间的通信,不需要知道对方的 IP 地址,通过
5. container:[container name/id]
- 说明:与
service:[service name]类似,container:[container name/id]模式允许一个容器加入另一个指定容器的网络命名空间,使得这两个容器可以共享相同的网络栈,通过localhost相互通信。 - 示例:
收起
yaml
version: '3'
services:
myservice1:
image: myimage1
container_name: mycontainer1
myservice2:
image: myimage2
network_mode: container:mycontainer1
- 优缺点:与
service:[service name]模式类似,优点是方便容器之间的通信,缺点是网络隔离性较差,对指定容器的依赖较强。



2291

被折叠的 条评论
为什么被折叠?



