Docker部署项目Feign调用服务报错-java.net.UnknownHostException已解决
目录
Docker部署项目Feign调用服务报错 java.net.UnknownHostException(已解决)
框架:springboot consul
feign调用服务
本地运行好好的,通过docker部署到虚拟机中就报错 java.net.UnknownHostException: a39446462fe9
2022-08-18T17:10:28.900026400Z 2022-08-18 17:10:28.898 ERROR 1 --- [p-nio-80-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is feign.RetryableException: a39446462fe9 executing GET http://consul-es/hello] with root cause
2022-08-18T17:10:28.900068555Z
2022-08-18T17:10:28.900073645Z java.net.UnknownHostException: a39446462fe9
2022-08-18T17:10:28.900076681Z at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[na:1.8.0_131]
2022-08-18T17:10:28.900080321Z at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_131]
2022-08-18T17:10:28.900083073Z at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_131]
2022-08-18T17:10:28.900086077Z at sun.net.NetworkClient.doConnect(NetworkClient.java:175) ~[na:1.8.0_131]
2022-08-18T17:10:28.900088745Z at sun.net.www.http.HttpClient.openServer(HttpClient.java:463) ~[na:1.8.0_131]
2022-08-18T17:10:28.900099541Z at sun.net.www.http.HttpClient.openServer(HttpClient.java:558) ~[na:1.8.0_131]
2022-08-18T17:10:28.900102998Z at sun.net.www.http.HttpClient.<init>(HttpClient.java:242) ~[na:1.8.0_131]
2022-08-18T17:10:28.900106054Z at sun.net.www.http.HttpClient.New(HttpClient.java:339) ~[na:1.8.0_131]
2022-08-18T17:10:28.900108640Z at sun.net.www.http.HttpClient.New(HttpClient.java:357) ~[na:1.8.0_131]
2022-08-18T17:10:28.900111404Z at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1202) ~[na:1.8.0_131]
2022-08-18T17:10:28.900114144Z at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138) ~[na:1.8.0_131]
2022-08-18T17:10:28.900116864Z at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032) ~[na:1.8.0_131]
2022-08-18T17:10:28.900119598Z at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:966) ~[na:1.8.0_131]
2022-08-18T17:10:28.900122377Z at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546) ~[na:1.8.0_131]
2022-08-18T17:10:28.900125088Z at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) ~[na:1.8.0_131]
2022-08-18T17:10:28.900127823Z at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) ~[na:1.8.0_131]
2022-08-18T17:10:28.900130491Z at feign.Client$Default.convertResponse(Client.java:108) ~[feign-core-10.10.1.jar!/:na]
2022-08-18T17:10:28.900133115Z at feign.Client$Default.execute(Client.java:104) ~[feign-core-10.10.1.jar!/:na]
2022-08-18T17:10:28.900137250Z at org.springframework.cloud.openfeign.ribbon.FeignLoadBalancer.execute(FeignLoadBalancer.java:93) ~[spring-cloud-openfeign-core-2.2.5.RELEASE.jar!/:2.2.5.RELEASE]
2022-08-18T17:10:28.900140307Z at org.springframework.cloud.openfeign.ribbon.FeignLoadBalancer.execute(FeignLoadBalancer.java:56) ~[spring-cloud-openfeign-core-2.2.5.RELEASE.jar!/:2.2.5.RELEASE]
2022-08-18T17:10:28.900143125Z at com.netflix.client.AbstractLoadBalancerAwareClient$1.call(AbstractLoadBalancerAwareClient.java:104) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]
2022-08-18T17:10:28.900145981Z at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:303) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]
2022-08-18T17:10:28.900148800Z at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:287) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]
2022-08-18T17:10:28.900151625Z at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:231) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900154355Z at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:228) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900157087Z at rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900159800Z at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.drain(OnSubscribeConcatMap.java:286) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900162601Z at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.onNext(OnSubscribeConcatMap.java:144) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900167925Z at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:185) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]
2022-08-18T17:10:28.900171093Z at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]
2022-08-18T17:10:28.900173952Z at rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900176578Z at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900179372Z at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900182091Z at rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900185088Z at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber$1.call(OperatorRetryWithPredicate.java:127) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900187962Z at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.enqueue(TrampolineScheduler.java:73) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900190701Z at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900193534Z at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:79) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900196425Z at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:45) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900199189Z at rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:276) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900201931Z at rx.Subscriber.setProducer(Subscriber.java:209) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900204543Z at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:138) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900207374Z at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:129) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900210180Z at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900212893Z at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900215668Z at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900218352Z at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900222188Z at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900225126Z at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.3.8.jar!/:1.3.8]
搞了一天没搞出来,不知道哪里出了问题,无解了
搞了两天搞出来了,原来是服务生产者application.yml少了个配置
#开启ip地址注册
prefer-ip-address: true
#实例的请求ip
ip-address: ${spring.cloud.client.ip-address}
(服务提供方)完整的application.yml
spring:
application:
name: project-es
elasticsearch:
rest:
uris: 192.168.233.137:9200
cloud:
consul:
host: 192.168.233.137
port: 8500
discovery:
instance-id: ${spring.application.name}:${server.port} #这个id作为唯一识别的id必填
service-name: consul-es
heartbeat:
enabled: true #不打开心跳机制,控制台会显示红叉
#开启ip地址注册
prefer-ip-address: true
#实例的请求ip
ip-address: ${spring.cloud.client.ip-address}
kafka:
bootstrap-servers: 192.168.233.137:9092
consumer:
group-id: esGroup # 指定默认消费者group id --> 由于在kafka中,同一组中的consumer不会读取到同一个消息,依靠groud.id设置组名
auto-offset-reset: earliest # smallest和largest才有效,如果smallest重新0开始读取,如果是largest从logfile的offset读取。一般情况下我们都是设置smallest
enable-auto-commit: true # enable.auto.commit:true --> 设置自动提交offset
auto-commit-interval: 100 #如果'enable.auto.commit'为true,则消费者偏移自动提交给Kafka的频率(以毫秒为单位),默认值为5000。
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer # 指定消息key和消息体的编解码方式
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer # 指定消息key和消息体的编解码方式
server:
port: 83
请求成功!
这里要感谢这篇文章,我参考了这里的配置
但是!!!!!!!!!!!!!!!!!!!
这样问题只解决了一半!
如果是虚拟机种docker创建的服务之间调用是没问题的,但如果本地启动的项目,调用虚拟机中的服务,还是不通
加了上述配置后,consul控制台显示的是这样的
加配置之前,是这样的
也就是说根据ip地址去调用服务,问题就在于,如果是虚拟机中的服务调用,没有问题,而如果是window本地启动的服务,却无法访问虚拟机中docker创建的容器的,ping不通
注:我虚拟机ip 是 192.168.233.137 ,而docker创建的容器ip是 172.17.0.9
这里可以参考:
这里我就不尝试了
以上