Docker 容器中 PHP 使用 Curl 访问本地服务异常

在 Docker 环境中,将应用程序和服务容器化是常见的做法,但是有时会遇到一些网络通信方面的问题。其中一个常见的问题是 PHP 容器无法使用 Curl 访问本地服务,这可能导致开发和调试过程中的困扰。

问题描述

通常情况下,我们会将 PHP 和 Nginx 这样的服务分别运行在独立的容器中。然而,由于 Docker 网络隔离的特性,PHP 容器可能无法直接访问本地服务,例如运行在宿主机上的 Nginx。

nginx 配置
在这里插入图片描述
php 代码片段

public function mason()
{// nft.test 本地域名$locationUrl = "http://nft.test/index.php?s=/api/article/index";$ch = curl_init();curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_URL, $locationUrl);curl_setopt($ch, CURLOPT_POSTFIELDS, []);if (!empty($headers)) {$traceId = $_SERVER['traceId'] ?? "";if (!empty($traceId)) {$headers['traceId'] = $traceId;}curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);}curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);$result = curl_exec($ch);if ($result === false) {echo "curlPost请求错误, error: " . curl_error($ch);}curl_close($ch);var_dump($result);
}

请求结果
在这里插入图片描述

探索解决方案

面对这个问题,我们需要一种有效的解决方案,以确保 PHP 容器能够正常访问本地服务。一种简单且实用的方法是让 PHP 容器直接与 Nginx 容器通信,而不是通过宿主机的本地域名。

解决方案

我们可以通过以下步骤来解决这个问题:

  1. 确定 Nginx 容器的 IP 地址: 首先,我们需要确定 Nginx 容器的 IP 地址。可以使用 Docker 命令来查找 Nginx 容器的 IP。
 >>> docker inspect nginx | grep "IPAddress">>> "SecondaryIPAddresses": null,"IPAddress": "","IPAddress": "172.25.0.4",
  1. 修改 PHP 容器的 hosts 文件: 然后,我们在 PHP 容器中修改 hosts 文件,将本地域名指向 Nginx 容器的 IP 地址。
>>> docker exec -it php容器地址 bash
>>> sh -c 'echo "172.25.0.4 nft.test" >> /etc/hosts'
  1. 重新测试 Curl 请求: 最后,我们重新测试 PHP 容器中的 Curl 请求,确认是否能够成功访问本地服务。

在这里插入图片描述

结论

通过这种简单而有效的方法,我们成功解决了 Docker 容器中 PHP 使用 Curl 访问本地服务异常的问题。这种解决方案不仅简单易行,而且避免了网络隔离带来的通信问题,确保了应用程序的正常运行和开发过程的顺利进行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/835588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统代理开启时,钉钉页面加载失败等问题处理

若Windows端钉钉点击工作台/文件提示“页面加载失败”,可先将钉钉升级到7.1.10及以上版本;若依旧报错,可通过以下方法操作: 1、【电脑端钉钉】-【登录页面】-【切换到密码登录页面】-【网络设置】-切换为【不使用代理】&#xff…

mysql NDBcluster数据库集群介绍、部署及配置

前言: MySQL集群是一个无共享的、分布式节点架构的存储方案,旨在提供容错性和高性能。它由三个主要节点组成:管理节点(MGM)、数据节点和SQL节点。 管理节点(MGM) 定义与用途:管理节点是MySQL Cluster的控制中心,负责管理集群内的其他节点。它提供配置数据,启动和停止…

UE5 重定向时 APose和TPose 问题

我用了这个解决↓ IK Rig Animation Retargeting in Unreal Engine | Unreal Engine 5.0 Documentation | Epic Developer Community (epicgames.com) 这个可以参考↓ 虚幻引擎中的重定向管理器 |虚幻引擎 5.0 文档 |Epic开发者社区 (epicgames.com)

AI伦理和安全风险管理终极指南

人工智能(AI)正在迅速改变各个领域的软件开发和部署。驱动这一转变的两个关键群体为人工智能开发者和人工智能集成商。开发人员处于创建基础人工智能技术的最前沿,包括生成式人工智能(GenAI)模型、自然语言处理&#x…

ASP.NET网上鲜花销售系统的设计

摘 要 本系统实现了一般电子商务所具备的功能,如商品浏览、用户登录注册、网上与购物、结算、后台数据库管理等,利用这些功能可以对鲜花销售信息进行较好的管理。 网上鲜花销售系统的使用者主要是客户和销售管理者,对于客户来说&#xff0…

利用一下Chat-GPT写两段处理字符串的简单样例ABAP程序。这样可以大大提高工作效率。Chat-GPT的能力真是让人震撼。

我让Caht-GPT写两段ABAP 程序,第一段程序要求如下: 判读字符串里面是否含有特殊字符,这里说的特殊字符不包括键盘上能够输入的字符,如果有这样的特殊字符则输出来。 DATA: lv_string TYPE string VALUE 你的字符串,lv_result TYP…

测试开发之Python自动化 Pytest 之 fixture

Pytest 之 fixture unittest 和 nose 都支持 fixture 的,但是 fixture 在 pytest 里使用更灵活。也算是 pytest 的一个闪光点吧可以理解为一个跟 setup 和 teardown 这种前后置类似的东西。但是比它们要强大、灵活很多 fixtur 当做参数传入 # -*- coding: utf-8 -*- import …

SSL证书 购买流程

在购买SSL证书之前,需要知道一点相关的知识,通常包括以下几个环节: 一、确定需求 1、根据需要保护的域名数量,在以下三类中选择合适的证书类型: 单域名证书,只对一个域名(例如abc.com&#x…

设计软件有哪些?渲染软件篇(4),渲染100邀请码1a12

除了之前介绍的一些渲染软件,这次我们继续介绍。 1、渲染100(http://www.xuanran100.com/?ycode1a12) 渲染100是网渲平台,为设计师提供高性能的渲染服务。通过它设计师可以把本地渲染移到云端进行,速度快价格便宜,支持3dmax、v…

数据序列包分析

基于数据序列包分析各部分的内容及含义,可能会考大题 基于本例分析,每部分含义如下: 时间(Time): 时间戳显示了数据包在网络中被捕获的具体时间。在本例中,如"0.000000"表示第一个数据…

视频批量剪辑指南:一键合并视频并添加背景音乐,高效便捷

在数字化时代,视频剪辑已经成为了一项常见且重要的技能。无论是制作家庭影片、工作展示还是社交媒体内容,掌握高效的视频剪辑技巧都能极大地提升我们的工作效率和创作质量。本文将为您介绍云炫AI智剪中高效的视频批量剪辑方法,让您能够一键合…

虚拟机ubuntu配置网络重启联网

前言 一段时间没用虚拟机&#xff0c;打开发现网络一直连接不上【如下图】 flags4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255ether 02:42:c2:5b:60:75 txqueuelen 0 (Ethernet)原因 1.以为是网络适配器选…

Ubuntu24.04安装中文输入法

Ubuntu24.04安装中文输入法 为了更好的体验&#xff0c;请访问个人博客 www.huerpu.cc:7000 一、添加中文语言支持 在安装中文输入法之前&#xff0c;首选要添加中文语言支持。选择System&#xff0c;点击Region & Language。 点击Manage Install Languages。 点击Insta…

更专业的汽车软件研发工具链,怿星重磅发布新产品

怿星科技在2024北京国际车展同期举办主题为“创新引领未来——聚焦智能汽车软件新基建”的新产品发布会&#xff0c;重磅推出1款绝对优势产品和4套场景解决方案。同时举行了4场热点技术研讨&#xff1a;国产工具链的机遇与挑战、新架构下的的车载DDS应用探索及测试方案介绍、软…

Linux 安裝 rpm包

下载 地址&#xff1a;https://developer.aliyun.com/packageSearch 安装 rpm -ivh lsof-4.87-6.el7.x86_64.rpmlsof -Ki|awk {print $2}|sort|uniq -c|sort -nr|head lsof | wc -l

vue2中npm i报错gyp info it worked if it ends with ok

当我拿到一个老的vue2项目&#xff0c;怎么也起不起来&#xff0c;后来找到报错原因&#xff0c;如上图所示&#xff0c;可以看到报错的path是node-sass&#xff0c;那么就猜想应该是sass版本和node版本不匹配。 于是我查看了我的node版本是16 而sass版本是下图所示&#xff0c…

itextpdf 7生成pdf(主要是文字和表格,支持中文)

我们经常会遇到要导出pdf的需求,方式有很多种 今天的教程是采用itextpdf的方式生成pdf itextpdf是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF文档&#xff0c;而且可以将Html文件转化为PDF文件。 这里先展示一下效果图 首先在pom.xml中引入相关依赖 <dep…

在 Navicat 17 创建一个数据字典

即将于 5 月 13 日发布的 Navicat 17&#xff08;英文版&#xff09;添加了许多令人兴奋的新功能。其中之一就是数据字典工具。它使用一系列 GUI 指导你完成创建专业质量文档的过程&#xff0c;该文档为跨多个服务器平台的数据库中的每个数据元素提供描述。在今天的博客中&…

Kotlin基本特性

目录 函数 if when 循环 面向对象 继承 主构造函数 接口 修饰符 ​编辑数据类 单例类 Lambda编程 集合 lambda用法 常见函数式API 空指针 判空辅助工具 字符串内嵌表达式 函数 fun add1(a:Int,b:Int):Int{return ab }fun add2(a:Int,b:Int):Int ab // 只…

CVPR 2024|多模态场景感知,高保真运动预测框架来了!

设想一下&#xff0c;你在家中准备起身&#xff0c;前往橱柜取东西。一个集成 SIF3D 技术的智能家居系统&#xff0c;已经预测出你 的行动路线&#xff08;路线通畅&#xff0c;避开桌椅障碍物&#xff09;。当你接近橱柜时&#xff0c;系统已经理解了你的意图&#xff0c;柜门…