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 这应该没问题。