首页 > 解决方案 > Docker Compose 网络:可访问主机的桥接驱动程序

问题描述

有没有办法在 Docker 中有一个微服务架构,使用 Docker Compose,容器之间的通信使用默认bridge值驱动程序(我没有network_mode在任何服务中指定任何docker-compose.yml内容),但是所有容器都有访问主机中的公共服务?

先感谢您。

标签: dockernetworkingdocker-compose

解决方案


您的容器始终可以访问您的主机。

在Linux下,可以直接使用容器内默认网关的地址;这将是您的容器所连接的主机上的网桥地址。在所有接口上侦听的任何主机服务都将在此地址可用。假设您的容器已iproute安装软件包,您可以使用以下方式获取网关地址:

ip route | awk '$1 == "default" {print $3}'

您当然可以使用任何主机接口的地址并将其作为环境变量 ( docker run -e HOSTADDR=192.168.23.5 ...) 传递;使用网关地址很方便,因为它可以从容器内部发现。

在 Docker for MacOS 或 Docker for Windows 下,您可以使用特殊host.docker.internal的主机名来引用主机,例如此处的文档。

请注意,如果您的主机服务未在所有接口上侦听,或者您有限制性防火墙配置,则可能需要进行更改,然后上述操作才能正常工作。


推荐阅读