浅谈一下本机、服务器、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网络,并且都是互相独立的

三、服务调用链路图:

以上是我个人的理解,有哪里不合理的,欢迎帮我指出来

posted @   pandazou  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示