3

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

重现步骤:启动两个单独的 ddev 容器,然后 ssh 进入其中一个。尝试使用 ddev 域 ping 另一个项目。

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

4

2 回答 2

8

编辑 2019-01-08:只需容器的 docker 名称,实际上很容易做到这一点,不需要额外的 docker-compose 配置。对于ddev-<projectname>-db. 因此,您可以使用主机名访问名为“d8composer”的项目的数据库容器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

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

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

于 2018-11-22T19:17:45.790 回答
0

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

例如,将此 docker-compose.api.yaml 添加到项目的 .ddev 文件夹(针对 ddev v1.1.1 更新):

version: '3.6'

services:
  myapi:
    image: drud/ddev-webserver:v1.1.0
    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

并在项目的 ./myapi_docroot 中放置一个虚拟 index.html。

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"
于 2018-08-09T13:37:04.743 回答