laradock问题:curl: (7) Failed to connect to port 80
nanshan 2024-10-26 11:15 22 浏览 0 评论
现在docker的应用已经越来越多,k8s是当下最热门的技术之一。
本地开发使用docker也成为主流。
我本地使用的是laradock作为开发工具。它提供了完善的php开发环境。
github地址:https://github.com/laradock/laradock,需要的同学自行查看。
今天主要讲一个在开发中遇到的问题。
laradock nginx容器中配置了多个server。在a.com通过curl访问b.com的一个接口时,报错。
curl: (7) Failed to connect to b.com port 80: Connection refused
假设服务器IP是172.9.0.44,且没有进程监听端口是80时:
若有TCP连接请求包到达172.9.0.44,则172.9.0.44的内核将回复RST包给客户端。
此时,在客户端一侧看来就是connect连接失败,被服务端拒绝连接。
也就是我们的请求的80端口是不存在的。
下面开始我的排错之旅:
首先要明确一件事情:
php-fpm和nginx位于两个容器中,它们通过开放端口。实现php-fpm和nginx之间通信。
所以php-fpm如果访问b.com。是跨容器访问。下面我们验证下,在php-fpm中发出的curl请求是否符合我们的预期。
1,进入到php-fpm容器内部
docker-compose exec php-fpm bash
ping b.com结果
直接ping b.com,其ip尽然是127.0.0.1。这很明显是不正确的。
php-fpm容器中80端口并没有被程序启用。所以返回连接被拒绝。
现在可以确定,curl请求的b.com,ip绑定有误,那我们只需要绑定域名到nginx容器ip即可。
我先说下解决办法。然后分析下原理。
找到docker-compose.yml下的nginx配置
修改networks的配置为红框中的格式。
停止nginx,重新构建并重启
docker-compose stop nginx
docker-compose build --no-cache nginx
docker-compose up -d nginx
现在再去执行curl请求。服务已经通了。问题解决。
再次在php-fpm中,ping a.com
下面我们来分析下几个问题点。
1,为什么一开始php-fpm中访问会是127.0.0.1?
我们简单回顾下docker的网络原理。
首先查看一下docker目前网络配置。
docker network ls
它们可以理解为:网卡,实现容器间的网络通信。laradock,定义了frontend和backend,实现了两个网络的隔离。
我们查看下laradock_backend,laradock_frontend的详细信息
docker network inspect laradock_frontend
docker network inspect laradock_backend
查看结果
[
{
"Name": "laradock_frontend",
"Id": "5c37d07b66779b455e1fbc556fe51b8ae3e4039b08a9b05b98cdd15a0e6a7245",
"Created": "2020-04-27T10:22:15.479114733Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"60d0eecce8e0d301771e0a41f655d7c48979212ac4c0b23f93903e29c8b06fcb": {
"Name": "laradock_nginx_1",
"EndpointID": "173dc0153204a86a540ecc9656cfba45083f9990197c89cf43c07a478834eeb1",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"c0756add42820acfabc56012a3dc23905493d9e78140ea73dcb2d524d0dc542f": {
"Name": "laradock_workspace_1",
"EndpointID": "ba2779d989fed77f7a2b4db7489db682603e2f2337632db00821707e3211e031",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "frontend",
"com.docker.compose.project": "laradock",
"com.docker.compose.version": "1.25.4"
}
}
]
[
{
"Name": "laradock_backend",
"Id": "ecdd2071acde2627c5d0103212fd6bca56babe7167840a959cc7d1edc611758b",
"Created": "2020-04-27T10:22:15.519014828Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"60d0eecce8e0d301771e0a41f655d7c48979212ac4c0b23f93903e29c8b06fcb": {
"Name": "laradock_nginx_1",
"EndpointID": "ca72cd4bfb8a28d7fee1ada405f8cdb01e78592c54c3f3451ba9858673a53191",
"MacAddress": "02:42:ac:13:00:07",
"IPv4Address": "172.19.0.7/16",
"IPv6Address": ""
},
"6229687c2524defd6ca066ede323ae4f490c31dc329db90104e1f0a526cc4672": {
"Name": "laradock_mysql_1",
"EndpointID": "8a40f6f113f92def0d5835099ea66ddf2009a9ccc85d1b69f9a3c9258e76a982",
"MacAddress": "02:42:ac:13:00:02",
"IPv4Address": "172.19.0.2/16",
"IPv6Address": ""
},
"6714536d3c10df6d27cd51836769174fe16b12d9a92c005e91f92e048012bfc7": {
"Name": "laradock_php-fpm_1",
"EndpointID": "988ff565bc5a6dfc919b632646ab2472a29b7bece0b34c139a09869b8e24e63e",
"MacAddress": "02:42:ac:13:00:06",
"IPv4Address": "172.19.0.6/16",
"IPv6Address": ""
},
"87d1932f73d814b2361ebcc6ea655132ca2d0062dbc5cc5d5da895be0d15fc5e": {
"Name": "laradock_docker-in-docker_1",
"EndpointID": "63d0a515211c785df6e1ef87866de1300fab3ef97dcdb55863d0b0e3cfaa2610",
"MacAddress": "02:42:ac:13:00:03",
"IPv4Address": "172.19.0.3/16",
"IPv6Address": ""
},
"8bb067d6e12b27cddb2a7c2f1f328f5b849ef9ec9260f3a18b48d6f8e0b7e0f3": {
"Name": "laradock_redis_1",
"EndpointID": "7532fa8f2f4eefb83f7964f66ae8fd799af27932555a1f25b6299768e4d16a39",
"MacAddress": "02:42:ac:13:00:04",
"IPv4Address": "172.19.0.4/16",
"IPv6Address": ""
},
"c0756add42820acfabc56012a3dc23905493d9e78140ea73dcb2d524d0dc542f": {
"Name": "laradock_workspace_1",
"EndpointID": "b3634cfc49b32e5b9ea22ff5a1897eac833596cb94a64923d00a642f1635b301",
"MacAddress": "02:42:ac:13:00:05",
"IPv4Address": "172.19.0.5/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "backend",
"com.docker.compose.project": "laradock",
"com.docker.compose.version": "1.25.4"
}
}
]
定义完成网卡后,我们的容器就需要和网卡关联。实现网络互通。
容器配置中指定网卡实现网络关联。
在容器中,/etc/hosts,添加ip映射。
所以php-fpm和nginx是在同一个网络的,访问对应域名是可以找到的,但是其ip为127.0.0.1。
2,networks aliases配置是什么意思?
官方解释:aliases是定义容器主机名称的别名,其他在同一网络的容器,可以使用服务名或者别名来连接对应容器的服务。
也就是,我们将域名定义为当前容器的主机别名。然后通过访问域名就可以访问对应的容器了。
还有一种修改方式是:在php-fpm中配置域名绑定。但是这个有个问题是,其他需要的容器也需要配置。不如别名配置一处即可。
以上是这个问题,我查找解决的流程。整个原理很简单。但是docker的细节还是比较多的。还是需要细致的研究。
感谢你的阅读,如有问题,也欢迎指正。
一个golanger/phper。一个创业的码农。
欢迎关注,别的不说,交个朋友。
相关推荐
- 三种自建KMS激活系统自动激活windows方法
-
第一种:在windows服务器上搭建主要针对vol版本(win7、win10、win20xx、win2012等等)平台:我自己搭建的windows虚拟机,windows2016的操作系统软件:...
- 重装系统被收98元?避开Windows付费陷阱的实用指南
-
重装系统被收98元?避开Windows付费陷阱的实用指南有网友反映,在重装Windows系统后,屏幕突然弹出“激活系统需支付98元服务费”的提示,疑惑自己是不是遭遇了付费陷阱。事实上,微软官方的Wi...
- Windows Server2012远程桌面服务配置和授权激活
-
安装:注意:安装完毕之后需手动重启一下计算机配置终端服务管理工具---远程桌面服务---RD授权诊断程序,查看当前服务器有没有授权授权:运行—>gpedit.msc->计算机配置---管理...
- 新书速览|Windows Server 2022 系统与网站配置实战
-
讲述桌面体验、ServerCore/NanoServer,容器与云系统的配置1本书内容《WindowsServer2022系统与网站配置实战》秉持作者一贯理论兼具实践的写作风格,以新版的Wi...
- Windows激活全攻略:KMS神钥与专业工具的完美结合!
-
对于许多Windows用户来说,系统的激活是一个必经的过程。虽然Windows操作系统在未经激活的状态下也可以使用一段时间,但长期来看,未激活的系统会限制某些功能并频繁提示用户激活。以下是两种流行的激...
- 微软Win9全新激活技术曝光(微软系统激活有什么用)
-
2014-07-0905:46:00作者:徐日俄罗斯Wzor日前披露了更多关于Windows9的最新消息,据悉,Windows9将会在今年秋季亮相,其宣传口号是“想要开始按钮和开始菜单?如你所...
- 快速激活Windows 10/11:CMD命令详细教程
-
#记录我的2024#激活Windows操作系统是确保系统功能和安全更新正常运行的重要步骤。本文将为您分享如何使用命令提示符(CMD)在Windows10和Windows11上进行激活的详细步骤。...
- Wndows 2019 RDS应用发布部署(rds的安装和应用程序的发布)
-
安装前的准备1、需要提供服务器作为应用中心,应用中心的推荐配置如下表所示。规格建议1-10人11-20人21-50人51-100人100+人CPU4核8核16核内存8GB16GB32GB64GB系统盘...
- 解决 Windows 系统激活难题(如何解决windows激活问题)
-
今天,一位朋友给我说,他手头有三台电脑,均同时弹出系统未激活的提示。他对此毫无头绪,便急忙将电脑上出现的激活提示信息一股脑发给了我。我看到其中一台显示的是“Windows10企业版LTSC尚...
- 自建KMS激活服务器(自建kms激活服务器的风险)
-
自建KMS激活服务器Win10和office安装后,都需要激活才可以使用,一般可以输入购买的MAK激活码进行在线激活,也可以通过KMS激活,网上也有很多激活工具,但这些工具一般都含有病毒或木马程序,容...
- 30秒免费激活windows和office亲测有效!
-
“第三方工具有病毒?”“KMS服务器激活总失效?”今天给大家分享一个开源激活工具——MicrosoftActivationScripts(MAS),无需密钥、不装软件,30秒永久激活Window...
- 「操作系统」Windows 10 LTSC 2019 企业版C大集成更新版
-
Windows10LTSC企业版CHIANNET集成更新优化整合多镜像版,CHIANNET,是USBOS超级PE维护盘工具箱作者,长久以来一直默默的更新着,USBOSPE软件,电脑城装机及...
- 一文看懂Windows激活:自查方法+授权类型科普(Win7/Win10通用)
-
一、如何判断Windows是否永久激活?无论是Win7还是Win10,均可通过以下方法快速验证:命令提示符法(通用):按下Win+R,输入slmgr.vbs/xpr并按回车键运行即可查看是否...
- 部分Windows Server 2019/2022用户反馈无法运行微软Teams应用
-
IT之家7月2日消息,科技媒体borncity今天(7月2日)发布博文,报道称在多个WindowsServer版本上,MicrosoftTeams应用近期出现了运行故障。用...
- 这种Windows激活方式已有20年...(windows现在激活)
-
2006年微软正式发布WindowsVista,随之而来引入了一项新的激活机制「OEM激活」,这项机制在Vista和Win7上最为流行。其实WindowsServer自2008开始至2025版本一...
你 发表评论:
欢迎- 一周热门
-
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
NAS:DS video/DS file/DS photo等群晖移动端APP远程访问的教程
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
手机如何设置与显示准确时间的详细指南
-
如何修复用户配置文件服务在 WINDOWS 上登录失败的问题
-
一加手机与电脑互传文件的便捷方法FileDash
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
- 最近发表
-
- 三种自建KMS激活系统自动激活windows方法
- 重装系统被收98元?避开Windows付费陷阱的实用指南
- Windows Server2012远程桌面服务配置和授权激活
- 新书速览|Windows Server 2022 系统与网站配置实战
- Windows激活全攻略:KMS神钥与专业工具的完美结合!
- 微软Win9全新激活技术曝光(微软系统激活有什么用)
- 快速激活Windows 10/11:CMD命令详细教程
- Wndows 2019 RDS应用发布部署(rds的安装和应用程序的发布)
- 解决 Windows 系统激活难题(如何解决windows激活问题)
- 自建KMS激活服务器(自建kms激活服务器的风险)
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)