SpringBoot Jar包直接运行时,与部署在Docker虚拟VM中的 Seata 网络不能互通官方提供参数 SEATA_IP 设定为 127.0.0.1 时,注册进Nacos的实际Ip仍为虚拟VM IP注册Mac本机公网IP时,SEATA_IP参数生效,但不能让本地SpringBoot应用达到直接访问的目的
Seata Docker部署时、支持注册IP为127.0.0.1
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没有直接关系
inb24sb22#
我将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,项目仍然无法连接
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_643.Seata-Sever工程ContainerHelper类isRunningInContainer方法直接返回true4.seata-distribution中的Dockerfile基础镜像改为openjdk:8u322-jre5.maven打包,然后生成docker镜像
3条答案
按热度按时间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没有直接关系
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,项目仍然无法连接
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镜像