我有两个需要相互交互的ddev项目。遇到某些问题时,我检查了已解析的IP连接。
我是通过SSH进入project1并ping project2(ping project2.ddev.local
)完成的
域解析为127.0.0.1
因此,我发送到该域的每个请求都将保留在当前容器中,而不会路由到其他项目。
复制步骤: 启动两个单独的ddev容器,然后将ssh放入其中一个。尝试使用ddev域对另一个项目执行ping操作。
是否存在两个(或多个)项目可以相互交互的解决方案?
答案 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"