seata Mac本机项目环境运行,Docker部署Seata无法指定SEATA_IP为127.0.0.1,本地项目从Nacos中读取到的Seata Ip无法连接

e5njpo68  于 2022-10-21  发布在  Mac
关注(0)|答案(3)|浏览(797)

Why you need it?

SpringBoot Jar包直接运行时,与部署在Docker虚拟VM中的 Seata 网络不能互通
官方提供参数 SEATA_IP 设定为 127.0.0.1 时,注册进Nacos的实际Ip仍为虚拟VM IP
注册Mac本机公网IP时,SEATA_IP参数生效,但不能让本地SpringBoot应用达到直接访问的目的

How it could be?

Seata Docker部署时、支持注册IP为127.0.0.1

92vpleto

92vpleto1#

这里有三个网络,mac、vm、docker内网,seata在docker内网中
如果注册为127.0.0.1,mac访问时
mac网络 -> mac网络:port,seata不在mac网络中,访问不到

建议开放docker端口到vm,注册vm的ip到nacos,mac访问时
mac网络 -> vm网络:port,这时可以访问到seata

与ip是否注册为127.0.0.1没有直接关系

inb24sb2

inb24sb22#

这里有三个网络,mac、vm、docker内网,seata在docker内网中
如果注册为127.0.0.1,mac访问时
mac网络 -> mac网络:port,seata不在mac网络中,访问不到

建议开放docker端口到vm,注册vm的ip到nacos,mac访问时
mac网络 -> vm网络:port,这时可以访问到seata

与ip是否注册为127.0.0.1没有直接关系

我将Seata从Docker内网模式改成了Host部署、将向Nacos注册的地址改为了127.0.0.1并成功注册
此时我尝试将Seata的SEATA_IP改为 127.0.0.1,注册在 Nacos 的IP是172.18.0.1,项目无法连接
将Seata的SEATA_IP改为 ifconfig 中的 en0 inet 192.168.3.168,注册在 Nacos 的IP也为 192.168.3.168,项目仍然无法连接

xzlaal3s

xzlaal3s3#

Mac M1下由于SEATA的判断当前运行环境的方式(读取/proc/1/cgroup)不被最新版的Docker Desktop所支持(具体细节可以google),不会解析及利用SEATA_IP环境变量的值。
下面写下本人的解决办法,供有需要的朋友参考。我使用的版本为1.4.1.

1.检出SEATA源码
2.由于grpc暂无arm64版本的支持,需要修改工程下相关配置,将pom文件(seata-grpc,seata-parent)中${os.detected.classifier}修改为osx-x86_64
3.Seata-Sever工程ContainerHelper类isRunningInContainer方法直接返回true
4.seata-distribution中的Dockerfile基础镜像改为openjdk:8u322-jre
5.maven打包,然后生成docker镜像

相关问题