百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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版本一...

取消回复欢迎 发表评论: