浅谈一下本机、服务器、docker-compose 容器之间网络通信
一、首先,先区分四个对象,它们分别有自己的网络
1、云服务器上,应用服务容器网络(app,nginx,mysql,redis等)app.net
2、云服务器上,模型服务容器网络(ai服务) 模型网络 ai.net
3、云服务器上:宿主机网络(服务器本机) 服务器本机网络 host.net
4、本机:本地网络 local.net
nginx和app在同一个网络内,nginx映射端口出来,app通过nginx反向代理暴露出来
注意,app没有映射端口出来,本机,以及服务器上宿主机是都访问不到的
二、本机调用生产上服务的一整条链路:
1、本机通过云服务器映射端口的nginx(80:默认开放,容器部署映射出来端口)访问到应用app服务(app.net网络)
2、app要完成接口逻辑,需要访问云服务器上模型容器的服务(ai.net网络),由于两个容器网络不通,所以只能通过模型容器映射容器内端口到宿主机环境(模型容器内网络没有nginx组件),这样app才能访问到模型服务,即相当于应用容器内app服务访问了宿主机上的服务一样
3、故此完成了一次完整的服务链路调用过程
还有两点需要注意:
1)云上应用docker-compose启的,应用服务容器之间网络(app.net)是互通的,直接容器名称互相访问,例如:app替代ip就行了(不能使用localhost,只有在同一个容器才能用)
2)从app服务访问模型容器服务,它们是通过宿主机完成通信的,此时不能再写localhost,要用宿主机内网ip才行
应用服务容器、模型服务容器、宿主机, 它们三个之间不能使用localhost,因为它们是三个相对独立隔离的环境,它们都有各自的localhost网络,并且都是互相独立的
三、服务调用链路图:
以上是我个人的理解,有哪里不合理的,欢迎帮我指出来
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人