首页 > 解决方案 > docker 容器之间的 CURL 请求

问题描述

背景

我继承了系统的代码库。作为参考,这是一个 symfony 项目。最终的计划是迁移到微服务架构。微服务仅响应 Web 请求并使用 JSONAPI 传输数据。

我已经单独开发了一个新的微服务。它已经过测试并表现良好。使旧系统下线是不可行的,因此方法是根据业务和基础架构需求/可能性逐个服务转换。

有两个独立的 docker 容器集,一个用于“旧系统”,一个用于“微服务”(以及它未来的其他服务)。两者都有各种容器,包括 php74。

由于我有两个面向 Web 的容器,因此我将它们映射如下:

这些不会在网络流量上发生冲突。

GET微服务做了很多事情,但值得注意的是,它对索引请求(我们称之为)运行“hello world,欢迎使用 API”风格的响应microservice.test

在“旧系统”中,我已经映射到新系统(我尝试了以下两种方法)

    networks:
      default:
        aliases:
          - microservice.test

也:

    extra_hosts:
      - "microservice.test:127.0.0.1"

如前所述,microservice.test在我的本地机器上响应。

如果我登录到“旧系统”php74 容器,我可以ping microservice.test并且这是成功的。

如果我从“旧系统”运行单元测试并使用 cURL 下载索引请求,我会得到null响应。注意:如果我 ping 或 curlgoogle.com我会得到响应。

下一步是使用提供的微服务客户端......但上面的调试步骤显示了问题。

实际上,当 php 尝试访问域microservice.test时,它看不到它。

问题

如何确保 docker 容器可以访问:

笔记:

提前致谢。

cURL 代码片段(根据要求)

// 1. Open cURL session
$ch = curl_init();

// 2. Set options
curl_setopt($ch, CURLOPT_URL, "http://microservice.test:8080/");
//curl_setopt($ch, CURLOPT_URL, "https://www.google.com/"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// 3. Execute and save response
$response = curl_exec($ch);

// 4. Close cURL session
curl_close($ch);

var_dump($response);
// dumps shows content with google, NULL with test

标签: phpdockercurldocker-composemicroservices

解决方案


推荐阅读