spring cloud feign docker上无法通讯的问题
我遇到一个挺严重的问题:在本地跑得好好的代码,放到docker的生产环境就完蛋了.表现是程序A feign client调用,程序B的方法失败.AB都在一个物理主机上.在程序B的方法第一句打印日志,然后发现根本没进这个方法.报错是这样的: o.a.c.c.C…. Servlet.service() for servlet [dispatcherServlet] in contex
我遇到一个挺严重的问题:在本地跑得好好的代码,放到docker的生产环境就完蛋了.
表现是程序A feign client调用,程序B的方法失败.
AB都在一个物理主机上.
在程序B的方法第一句打印日志,然后发现根本没进这个方法.
报错是这样的:
o.a.c.c.C…. Servlet.service() for servlet [dispatcherServlet] in context with path [/healthtimeWeb] threw exception [request processing failed; nested exception is com.netflix.hystrix.exception.HystrixRuntimeException: CourseFeignClient#getCourseDetail(Long) time-out and fallback failed.] with root case java.util.concurrent.TimeoutException:null ….AbstractCommand.java:980
设置了docker link 设置了
preferIpAddress: true
ip-address: 172.28.12.2 主机ip
client: healthcheck.enabled: true
registerWithEureka: true
fetchRegistry: true hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 15000
在docker容器A里pingB的物理机ip
docker exec -it A ping 172.28.12.2:xxx
是通的.
ping B的docker内网ip 172.0.xxx.xx的也是通的
如果说ping不能测端口那么docker内网ip不同啊也该ping 不通才对.
但是A就是调不了B的方法.
之后就是各种改程序配置.然并卵.
搞了两天又去看了docker网络结构的博客.这理论还是没什么用.但是偶然发现ping b的主机名不通.
docker-compose v2 external_links不知怎么没起到作用 改为depends_on,让容器名可以ping通就好了.
然后我又试了试ip-address的问题.不设最好.
更多推荐
所有评论(0)