两个ddev项目之间的通信

时间:2018-08-06 14:44:59

标签: ddev

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

复制步骤: 启动两个单独的ddev容器,然后将ssh放入其中一个。尝试使用ddev域对另一个项目执行ping操作。

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

2 个答案:

答案 0 :(得分:1)

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


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

假设您有两个名为project1和project2的项目,并且希望project2可以从project1访问数据库容器。

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

version: '3.6'
services:
  web:
    external_links:
      - ddev-project1-db:proj1-db

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

请注意,这通常是一个坏主意,最好不要让两个 dev 项目相互依赖,最好弄清楚尽可能简单的开发环境。如果只需要一个额外的数据库,则可能要尝试How can I create and load a second database in ddev?。如果您只需要一个额外的Web容器作为API服务器或其他工具,则other answer会更好。

答案 1 :(得分: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"