我有两个需要相互交互的 ddev 项目。当遇到一些问题时,我会检查已解析的 IP 以进行连接。我通过 ssh 进入 project1 并 ping project2 ( ping project2.ddev.local
) 域解析为 127.0.0.1 所以我发送到该域的每个请求都将保留在当前容器中,并且不会路由到其他项目。
重现步骤:启动两个单独的 ddev 容器,然后 ssh 进入其中一个。尝试使用 ddev 域 ping 另一个项目。
是否有两个(或更多)项目可以相互交互的解决方案?
我有两个需要相互交互的 ddev 项目。当遇到一些问题时,我会检查已解析的 IP 以进行连接。我通过 ssh 进入 project1 并 ping project2 ( ping project2.ddev.local
) 域解析为 127.0.0.1 所以我发送到该域的每个请求都将保留在当前容器中,并且不会路由到其他项目。
重现步骤:启动两个单独的 ddev 容器,然后 ssh 进入其中一个。尝试使用 ddev 域 ping 另一个项目。
是否有两个(或更多)项目可以相互交互的解决方案?
编辑 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 服务器或其他任何东西,那么另一个答案会更好。
我试过了,效果很好;基本思想是将单独的 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"