ddev:从另一个容器调用web容器某个端口的端点
ddev: Call the endpoint of a certain port of the web container from another container
我用 ddev 设置了一个 Shopware 6 项目。现在我想为我的一个插件编写 cypress 测试。 shopware 测试套件在 web 容器中的端口 8005 上启动了一个 node express 服务器。我已经为 ddev 配置了端口,这样我就可以在我的浏览器中打开 express 端点:http://my.ddev.site:8005/cleanup。这是有效的。
对于赛普拉斯,我创建了一个新的 ddev 容器,其中包含一个新的 docker-compose 文件:
version: '3.6'
services:
cypress:
container_name: ddev-${DDEV_SITENAME}-cypress
image: cypress/included:4.10.0
tty: true
ipc: host
links:
- web:web
environment:
- CYPRESS_baseUrl=https://web
- DISPLAY
labels:
com.ddev.site-name: ${DDEV_SITENAME}
com.ddev.approot: $DDEV_APPROOT
volumes:
# Project root
- ../shopware:/project
# Storefront and Administration
- ../shopware/vendor/shopware/platform/src/Storefront/Resources/app/storefront/test/e2e:/e2e-Storefront
- ../shopware/vendor/shopware/platform/src/Administration/Resources/app/administration/test/e2e:/e2e-Administration
# Custom plugins
- ../shopware/custom/plugins/MyPlugin/src/Resources/app/administration/test/e2e:/e2e-MyPlugin
# for Cypress to communicate with the X11 server pass this socket file
# in addition to any other mapped volumes
- /tmp/.X11-unix:/tmp/.X11-unix
entrypoint: /bin/bash
我现在可以成功打开 cypress 界面,并且可以看到我的测试。现在的问题是,总是在执行 cypress 测试之前,调用 express 端点(使用上面的 URL )并且 cypress 容器似乎无法访问端点。这是输出:
cy.request() failed trying to load:
http://my.ddev.site:8005/cleanup
We attempted to make an http request to this URL but the request failed without a response.
We received this error at the network level:
> Error: connect ECONNREFUSED 127.0.0.1:8005
-----------------------------------------------------------
The request we sent was:
Method: GET
URL: http://my.ddev.site:8005/cleanup
所以我可以在我的浏览器中调用这个端点,但 cypress 不能。 cypress 容器中是否缺少从 web 容器调用端口 8005 的任何配置?
您需要将此添加到 cypress 服务中:
external_links:
- "ddev-router:${DDEV_HOSTNAME}"
然后您的 http URL 将通过“.ddev.site”通过路由器访问。
如果您需要受信任的 https URL 会稍微复杂一些,但是对于 http 这应该没问题。
我用 ddev 设置了一个 Shopware 6 项目。现在我想为我的一个插件编写 cypress 测试。 shopware 测试套件在 web 容器中的端口 8005 上启动了一个 node express 服务器。我已经为 ddev 配置了端口,这样我就可以在我的浏览器中打开 express 端点:http://my.ddev.site:8005/cleanup。这是有效的。
对于赛普拉斯,我创建了一个新的 ddev 容器,其中包含一个新的 docker-compose 文件:
version: '3.6'
services:
cypress:
container_name: ddev-${DDEV_SITENAME}-cypress
image: cypress/included:4.10.0
tty: true
ipc: host
links:
- web:web
environment:
- CYPRESS_baseUrl=https://web
- DISPLAY
labels:
com.ddev.site-name: ${DDEV_SITENAME}
com.ddev.approot: $DDEV_APPROOT
volumes:
# Project root
- ../shopware:/project
# Storefront and Administration
- ../shopware/vendor/shopware/platform/src/Storefront/Resources/app/storefront/test/e2e:/e2e-Storefront
- ../shopware/vendor/shopware/platform/src/Administration/Resources/app/administration/test/e2e:/e2e-Administration
# Custom plugins
- ../shopware/custom/plugins/MyPlugin/src/Resources/app/administration/test/e2e:/e2e-MyPlugin
# for Cypress to communicate with the X11 server pass this socket file
# in addition to any other mapped volumes
- /tmp/.X11-unix:/tmp/.X11-unix
entrypoint: /bin/bash
我现在可以成功打开 cypress 界面,并且可以看到我的测试。现在的问题是,总是在执行 cypress 测试之前,调用 express 端点(使用上面的 URL )并且 cypress 容器似乎无法访问端点。这是输出:
cy.request() failed trying to load:
http://my.ddev.site:8005/cleanup
We attempted to make an http request to this URL but the request failed without a response.
We received this error at the network level:
> Error: connect ECONNREFUSED 127.0.0.1:8005
-----------------------------------------------------------
The request we sent was:
Method: GET
URL: http://my.ddev.site:8005/cleanup
所以我可以在我的浏览器中调用这个端点,但 cypress 不能。 cypress 容器中是否缺少从 web 容器调用端口 8005 的任何配置?
您需要将此添加到 cypress 服务中:
external_links:
- "ddev-router:${DDEV_HOSTNAME}"
然后您的 http URL 将通过“.ddev.site”通过路由器访问。
如果您需要受信任的 https URL 会稍微复杂一些,但是对于 http 这应该没问题。