通过 http/s 在 ddev 项目之间进行通信

Communicating between ddev projects via http/s

过去六个月左右我一直在使用 DDev。大大提高了我的效率。谢谢!

我正在寻找一种更好的方法来将多个站点 运行 集成到单独的容器中。推荐的解决方案是使用内部容器引用(例如 ddev-projectname-web)。这对我的项目之一不起作用,因为目标站点依赖匹配的主机名进行身份验证。

场景:SiteA 通过 REST 与 SiteB 通信。

站点A

Project-name: sitea Hostname: sitea.ddev.site Container reference: ddev-sitea-web

站点 B

Project-name: siteb Hostname: siteb.ddev.site Container reference: ddev-siteb-web

为了通过 SiteB(tcp 或 rest)进行身份验证,主机名必须一致,在本例中 siteb.ddev.site,因此 ddev-siteb-web 不起作用。

我目前的解决方法是在来自 SiteA 的 REST 调用中使用 SiteB 主机名,并将内部 IP 添加到 SiteA 网络上的 /etc/hosts(类似于 172.1.0.1 siteb.ddev.site)。我正在寻找更好的解决方案,因为当我 stop/restart SiteA and/or 时主机配置丢失,当我 stop/restart SiteB.

时 IP 发生变化

一个理论上的选项是指定另一个 运行 docker 实例并自动将该 IP 地址和主机名添加到集成站点的 /etc/hosts 文件的配置设置。

谢谢!

不同的项目可以通过两种方式相互通信。

第一种方法是直接使用容器名称,我想这就是你在这里所做的。

但还有另一种方法(参见 FAQ - latest)。您只需要将 docker-compose.comm.yaml 添加到客户端项目的 .ddev 目录中,如下所示:

version: '3.6'
services:
  web:
    external_links:
    - "ddev-router:otherproject.ddev.site"

这样您就可以使用其他站点的规范名称进行通信。这仅适用于 HTTP/S 流量,因为它通过 ddev-router,这是一个反向代理。