Докер: Клиент не подключается к Eureka Server - PullRequest
0 голосов
/ 15 марта 2019

Я хочу создать контейнер для моего клиента и контейнер для моего сервера и подключить их.

Клиент:

server.port=8084
spring.application.name=articlemicroservice

#already tried localhost & hostIp 
eureka.client.serviceUrl.defaultZone=http://discovery:8761/eureka

eureka.client.fetchRegristry=true
eureka.instance.preferIpAddress=true

spring.h2.console.enabled=true
spring.datasource.platform=h2
spring.datasource.url=jdbc:h2:mem:shop

Сервер:

server.port=8761
spring.application.name=eureka-server

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
# eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
eureka.instance.lease-expiration-duration-in-seconds: 2  

Я создал оба контейнера с помощью docker-maven-plugin.Dockerfile выглядит следующим образом:

FROM java
ADD /articlemicroservice.jar //
ENTRYPOINT ["java", "-jar", "/articlemicroservice.jar"]

Для запуска контейнера я использую

docker run -it -p 8761:8761 eurekaserver
docker run -it -p 8084:8084 articlemicroservice

Когда я запускаю Cient, я просто получаю: "com.netflix.discovery.shared.transport.TransportException: не удается выполнить запрос на каком-либо известном сервере "и

 "2019-03-15 17:54:51.439  WARN 1 --- [nfoReplicator-0] c.n.discovery.InstanceInfoReplicator     : There was a problem with the instance info replicator"

Я что-то забыл в свойствах?

Редактировать: Это конфигурация докера.maven-плагин:

    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>1.2.0</version>
        <configuration>
            <imageName>articlemicroservice</imageName>
            <baseImage>java</baseImage>
            <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
            <!-- copy the service's jar file from target into the root directory 
                of the image -->
            <resources>
                <resource>
                    <targetPath>/</targetPath>
                    <directory>${project.build.directory}</directory>
                    <include>${project.build.finalName}.jar</include>
                </resource>
            </resources>
        </configuration>
    </plugin>

1 Ответ

2 голосов
/ 16 марта 2019

Как уже говорилось, отдельные контейнеры будут подключаться к сети по умолчанию Docker Bridge с именем контейнера.

Так как вы не упомянули имя контейнера и он не разрешает службу по имени, указанному в файле свойств

eureka.client.serviceUrl.defaultZone=http://discovery:8761/eureka

Чтобы заставить его работать, запуская контейнеры напрямую, используйте ip контейнера eureka-server

# start eureka server container
$ docker run  --name eureka-server -p 8081:8081 -d -rm eureka-server

# start eureka client container
$ docker run --name eureka-client -p 8082:8082 -d --rm -e EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://172.17.0.2:8081/eureka eureka-client

Проверьте мостовую сеть по умолчанию, чтобы найти подключенные контейнеры и их ips

$ docker network inspect bridge


 "Containers": {
            "4e4ce0e24091bda8e78805faad7ee31ba12fe5cd266c9d8a51dacf5b88813a67": {
                "Name": "eureka-client",
                "EndpointID": "edb2d9b333e6b974cfcf939e1585847c82c7ddebde5c44065f1e101ff12cb2bd",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            },
            "c4534a928c71430414b95324a3626aa5c0bf6535a5ffce1fe38a060cfc07d0df": {
                "Name": "eureka-server",
                "EndpointID": "af82ea5ca05283bac6634ee877e8e3c40c7cdbe7d3c2126bfb53c9db1747d0cc",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },

Идеальным решением является использование docker compose.

докер-compose.yml

version: '3.7'
services:
  eureka-server:
    image: eureka-server
    ports:
      - "8080:8080"
  eureka-client:
    build: eureka-client
    ports:
      - "8082:8082"
    environment:
      EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://eureka-server:8080/eureka    


Подробнее здесь:

Связать контейнеры в докере по умолчанию

...