两个 ddev 项目之间的通信

Tim*_*ner 3 ddev

我有两个需要相互交互的 ddev 项目。当遇到一些问题时,我检查连接的已解析 IP。我通过 ssh 进入 project1 并 ping project2 ( ping project2.ddev.local) 域解析为 127.0.0.1 所以我发送到该域的每个请求都将保留在当前容器中,而不是路由到另一个项目。

重现步骤: 启动两个独立的 ddev 容器并通过 ssh 进入其中之一。尝试使用 ddev 域 ping 另一个项目。

是否有两个(或多个)项目可以相互交互的解决方案?

rfa*_*fay 6

编辑 2019-01-08:实际上只需使用容器的 docker 名称即可轻松完成此操作,不需要额外的 docker-compose 配置。对于ddev-<projectname>-db. 因此,您可以使用主机名访问名为“d8composer”的项目的 db 容器ddev-d8composer-db;例如mysql -udb -pdb -h ddev-d8composer-db db


这是另一种技术,它实际上确实让两个项目相互通信。

假设您有两个名为 project1 和 project2 的项目,并且您希望 project2 能够从 project1 访问 db 容器。

使用以下内容将 .ddev/docker-compose.extradb.yaml 添加到 project2 的 .ddev 文件夹中:

version: '3.6'
services:
  web:
    external_links:
      - ddev-project1-db:proj1-db
Run Code Online (Sandbox Code Playgroud)

现在可以从 project2 上的 web 容器访问 project1 的数据库容器。例如,您可以mysql -h proj1-db从 project2 Web 容器内。

请注意,这通常是一个坏主意,最好不要让两个开发项目相互依赖,最好找出尽可能简单的开发环境。如果您只需要一个额外的数据库,您可能想尝试如何在 ddev 中创建和加载第二个数据库?. 如果您只需要一个额外的 Web 容器作为 API 服务器或其他任何东西,那么另一个答案会更好。

  • 这应该是公认的答案 (3认同)
  • 这也适用于 Web 容器,例如,如果项目 2 使用项目 1 的 REST API:`ddev-project1-web:project1.ddev.site` (3认同)

rfa*_*fay 2

我尝试了这个,效果非常好;基本思想是将单独的 ddev-webserver 作为服务运行。我们通常将 ddev“服务”视为类似 redis 或 memcache 或 solr 的东西,但它实际上可以是任何类型的 API 服务器,并且可以使用 ddev-webserver 映像(或您想要使用的任何其他 Web 服务器映像)。

例如,将此 docker-compose.api.yaml 添加到项目的 .ddev 文件夹中:

services:
  myapi:
    image: ddev/ddev-webserver:v1.22.6
    restart: "no"
    labels:
      com.ddev.site-name: ${DDEV_SITENAME}
      com.ddev.approot: $DDEV_APPROOT
      com.ddev.app-url: $DDEV_URL
    volumes:
      - "../myapi_docroot/:/var/www/html:cached"
      - ".:/mnt/ddev_config:ro"

  web:
    links:
      - myapi:$DDEV_HOSTNAME
Run Code Online (Sandbox Code Playgroud)

并将虚拟的 index.html 放入项目的 ./myapi_docroot 中。

之后ddev start您可以ddev ssh -s myapi在那里做任何您想做的事情(并且 myapi_docroot 安装在 /var/www/html )。如果您ddev ssh进入 Web 容器,curl http://myapi您将看到 myapi_docroot/index.html 的内容。您的 myapi 容器可以访问“db”容器,或者您可以运行另一个 db 容器,或者...

请注意,这会将主项目的子目录挂载为 /var/www/html,但它实际上可以挂载您想要的任何内容。例如,

    volumes:
      - "../../fancyapiproject/:/var/www/html:cached"
Run Code Online (Sandbox Code Playgroud)