请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Feign调用容器内服务超时(局域网与宿主机容器通讯)

原因已确认,网络不通。

    1. ip段说明

        192.168开头为局域网

        10.42开头为宿主机内的容器网段

    2. 说明

        容器内部能ping通局域网

        容器之间能ping通容器

        宿主机能ping通全部网段

        局域网不能ping通容器网段(造成服务之间无法通讯)

    3. 情况说明

        开发好一部分服务后,部署到容器。

        IDE开发新的服务并直接运行,需要调用到已部署在容器内的服务。

        通过宿主机暴露出的端口注册到eureka,通过feign调用eureka上面的服务,网络不通响应超时。


        //img1.sycdn.imooc.com//szimg/5af252500001a9c905380313.jpg

正在回答 回答被采纳积分+3

3回答

提问者 慕先生4222854 2018-05-22 19:06:14

目前的方式是使用hostname注册,指定宿主机IP,这样开发环境就能访问到已部署好的服务。

eureka.instance.hostname=192.168.0.131

eureka.instance.prefer-ip-address=false

1 回复 有任何疑惑可以回复我~
提问者 慕先生4222854 2018-05-16 11:16:35

有道友遇到诸如此类问题没,求解决方案。
1. 打通网络

2. 三个环境

0 回复 有任何疑惑可以回复我~
  • 通过宿主机暴露出的端口注册到eureka,通过feign调用eureka上面的服务,网络不通响应超时
    这是因为服务所在的机器有多个网卡/IP,注册的时候用了容器的 ip, 应该用宿主机的 ip, 其实也就是这个配置的问题eureka.instance.prefer-ip-address: true
    关于这一点,我在后面的课程 rancher 部署有讲哦,可以继续往下看。
    
    局域网不能ping通容器网段(造成服务之间无法通讯)
    这个是正常的,也不需要 ping 通,为什么 docker run  要加 -p 8080:8080,因为 docker 容器默认使用的是桥接
    回复 有任何疑惑可以回复我~ 2018-05-17 10:54:41
殇腥黯皓 2018-05-10 14:03:35

你的用法不对,环境要隔离,不能混用,本地服务都注册到本地eureka,容器里的服务注册到容器的eureka;如果你是把容器里的当生产环境,那么你就是没有把开发环境和生产环境分开

0 回复 有任何疑惑可以回复我~
  • 提问者 慕先生4222854 #1
    你好,这样就会遗留下一个问题,如果有100个服务,那本地每天启动需要的服务也是完全不科学的。
        这里部署的是公司的开发环境,已经开发好的服务会部署好。
    回复 有任何疑惑可以回复我~ 2018-05-11 16:46:00
  • 殇腥黯皓 回复 提问者 慕先生4222854 #2
    可以这样理解,一个环境里网络必须是互通的,你也说了,局域网不能ping通容器网段(造成服务之间无法通讯),说明这已经不是一个环境了。或者你也可以简单理解,一个环境ip网段是一致的,开发环境都是192.168.x.x。100个服务,并不需要都在本地启动,保证在开发环境里即可
    回复 有任何疑惑可以回复我~ 2018-05-13 13:50:35
  • 提问者 慕先生4222854 回复 殇腥黯皓 #3
    你好!这样就引发出了一个资源问题,此时会存在三个环境。
    开发环境、测试环境、生产环境。
    一个局域网环境(开发环境),不通过docker部署开发好的99个服务,然后项目开发中,调用这里面的服务。
    一个测试环境,模拟线上,通过docker部署服务
    一个线上生产环境。
    这样不说资源,光是服务同步就得花费大量精力。
    大神请问你在工作中是如何解决这类问题的,还是就这样整。谢谢!
    回复 有任何疑惑可以回复我~ 2018-05-16 11:14:04
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信