[英]Spring Boot 2 app cannot connect to mysql while run inside docker container triggered by docker-maven-plugin
[英]Spring Microservices Cannot Connect Via Eureka When Inside Docker Container
所以我一直在嘗試解決這個問題,4天后我仍然無法找到解決方案。 我已經使用 Spring Boot 構建了一個 API 網關,它通過 Zuul 充當 Eureka Server,並且我有一個充當 Eureka Client 的微服務。 當我在 Intellij 中本地運行它時,一切正常,它們發現並相互連接。 但是,當它們在容器中時,出現以下異常:
2022-05-16 12:42:49.087 WARN 1 --- [nfoReplicator-0] cndstdRetryableEurekaHttpClient:請求執行失敗並顯示消息:java.net.UnknownHostException:http 2022-05-16 12:42:49.088 WARN 1 -- - [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_USER/8322e6fdb2 35:user:8082 - 注冊失敗無法在任何已知服務器上執行請求
com.netflix.discovery.shared.transport.TransportException:無法在 com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.9. 17.jar!/:1.9.17] 在 com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.17.jar!/:1.9.17 ] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:5 9) ~[eureka-client-1.9.17.jar!/:1.9.17] at com.netflix.discovery .shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.17.jar!/:1.9.17] 在 com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator。注冊(EurekaHttpClientDecorator.java:56)~[eureka-client-1.9.17.jar!/:1.9.17] at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:850)~[eureka-client-1.9 .17. jar!/:1.9.17] 在 com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121) [eureka-client-1.9.17.jar!/:1.9.17] 在 com.netflix.discovery.InstanceInfoReplicator $1.run(InstanceInfoReplicator.java:101) [eureka-client-1.9.17.jar!/:1.9.1 7] 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na: 1.8.0_332] 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_332] 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na :1.8.0_332] 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1. 8.0_332] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_332] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8 .0_332] 在 java.lang.Thread.run(Thread.java:750) [na:1.8.0_332]
我的尤里卡服務器看起來像這樣:
Docker-compose.yaml
version: '3.8'
services:
kwettergateway-docker:
image: user/kwettergateway
ports:
- "8761:8761"
userservice-docker:
image: user/userservice
ports:
- "8082:8082"
links:
- kwettergateway-docker
應用程序屬性:
server.port=8761
#Gateway properties
spring.application.name=gateway
eureka.instance.prefer-ip-address=true
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.server.wait-time-in-ms-when-sync-empty=0
zuul.prefix=/api
zuul.routes.user.path=/user/**
zuul.routes.user.url=http://localhost:8082/
Dockerfile:
FROM openjdk:8
EXPOSE 8080
ADD target/kwettergateway-docker.jar kwettergateway-docker.jar
ENTRYPOINT ["java", "-jar", "/kwettergateway-docker.jar"]
我的尤里卡客戶端看起來像這樣:
應用程序屬性:
server.port=8082
#Gateway properties
spring.application.name=user
eureka.instance.prefer-ip-address=true
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
您嘗試使用 Docker 運行您的應用程序,因此在您的 application.properties 文件中,您應該將 localhost 替換為圖像名稱。 另外,需要提及的是,您應該使用@EnableEurekaServer
標記您的 Eureka 服務器。 如果你想看看它,請訪問 - https://github.com/zhurasique/easycar
我不得不使用 docker 主機而不是 localhost。 所以它現在使用以下代碼:
eureka.client.serviceUrl.defaultZone=http://host.docker.internal:8761/eureka/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.