我有两个需要相互交互的 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”的项目的 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-dbRun Code Online (Sandbox Code Playgroud)
现在可以从 project2 上的 web 容器访问 project1 的数据库容器。例如,您可以mysql -h proj1-db从 project2 Web 容器内。
请注意,这通常是一个坏主意,最好不要让两个开发项目相互依赖,最好找出尽可能简单的开发环境。如果您只需要一个额外的数据库,您可能想尝试如何在 ddev 中创建和加载第二个数据库?. 如果您只需要一个额外的 Web 容器作为 API 服务器或其他任何东西,那么另一个答案会更好。
我尝试了这个,效果非常好;基本思想是将单独的 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)
| 归档时间: |
|
| 查看次数: |
937 次 |
| 最近记录: |