php - docker 容器之间的 CURL 请求
问题描述
背景
我继承了系统的代码库。作为参考,这是一个 symfony 项目。最终的计划是迁移到微服务架构。微服务仅响应 Web 请求并使用 JSONAPI 传输数据。
我已经单独开发了一个新的微服务。它已经过测试并表现良好。使旧系统下线是不可行的,因此方法是根据业务和基础架构需求/可能性逐个服务转换。
有两个独立的 docker 容器集,一个用于“旧系统”,一个用于“微服务”(以及它未来的其他服务)。两者都有各种容器,包括 php74。
由于我有两个面向 Web 的容器,因此我将它们映射如下:
"80:80"
“旧系统”"8080:80"
“微服务”。
这些不会在网络流量上发生冲突。
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 容器可以访问:
- 托管在不同 docker 容器集(不同 docker-compose 文件)上的域
笔记:
- 这必须使用仅网络流量
- php容器可以ping通
microservice.test
域 - cURL 未能获得
microservice.test
域的响应 - cURL 成功获得来自外部 url 的响应,例如 google
提前致谢。
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
解决方案
推荐阅读
- r - knitr 切断 coord_fixed ggplot
- database - 邮政编码/邮政编码和位置数据库
- java - 字节数组值的内存高效映射
- php - 如何使用 Curl (ringCaptcha) 发送短信
- c# - Multiple joins in SQL statement
- python - PyAudio 不会安装
- reset - Objective-C 将 NSView 从 xib 重置为初始状态?
- python - 如何在最后一次匹配后返回列表的剩余元素?
- database - 将 Oracle 12c 数据库的 NLS_CHARACTERSET 从 US7ASCII 更改为 AL32UTF8 的方法
- c# - 您可以将 NavigationPage 放在 ContentPage 中吗?