docker - Docker Compose 网络:可访问主机的桥接驱动程序
问题描述
有没有办法在 Docker 中有一个微服务架构,使用 Docker Compose,容器之间的通信使用默认bridge
值驱动程序(即我没有network_mode
在任何服务中指定任何docker-compose.yml
内容),但是所有容器都有访问主机中的公共服务?
先感谢您。
解决方案
您的容器始终可以访问您的主机。
在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
的主机名来引用主机,例如此处的文档。
请注意,如果您的主机服务未在所有接口上侦听,或者您有限制性防火墙配置,则可能需要进行更改,然后上述操作才能正常工作。
推荐阅读
- python - 参数处理
- jupyter-notebook - 如何在现有的 prem kubernetes 集群上安装 kubeflow
- python - matplotlib 在多线程中运行时不稳定
- html - 按钮的边框半径
- git - 在 Jenkins 中构建多 Azure DevOps 拉取请求
- php - DOMXPath::query():渲染上的无效表达式
- jquery - 如何将 ajax 响应数据设置为全局变量?
- javascript - 如何获取多个 API 请求或 URL 并从每个 URL 或 API 请求中检索数据?
- sql - 在 CREATE TABLE 中使用 ON DELETE/UPDATE 时出现缺少关键字错误
- postgresql - AWS Lambda 连接到 EC2 中的 Postgres