Обнаружение службы с помощью eureka не работает в контейнере докеров

Когда я запускаю свой шлюз API в контейнере докеров, он не может найти мои службы, зарегистрированные в eureka.

API-шлюз

- ocelot.json

{
  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/api/values",
      "DownstreamScheme": "http",
      "UseServiceDiscovery": true,
      "ServiceName": "sampleservice",
      "UpstreamPathTemplate": "/sample-api/{catchAll}"
    }
  ],
  "GlobalConfiguration": {
    "UseServiceDiscovery": true,
    "ServiceDiscoveryProvider": {
      "Type": "Eureka",
      "Host": "myeurekaserver",
      "Port": "8761"
    }
  }
}

- appsettings.json для API Gateway

{
  "eureka": {
    "client": {
      "shouldRegisterWithEureka": false,
      "serviceUrl": "http://myeurekaserver:8761/eureka/",
      "ValidateCertificates": false
    },
    "instance": { 
      "appName": "gateway",
      "hostName": "myeurekaserver", 
      "port": "7000"
    }
  }
}

Конфигурация службы --appsettings.json

{
  "eureka": {
    "client": {
      "shouldRegisterWithEureka": true,
      "serviceUrl": "http://myeurekaserver:8761/eureka/",
      "ValidateCertificates": false
    },
    "instance": {
      "appName": "sampleservice",
      "hostName": "myeurekaserver",
      "port": "7001"
    }
  }
}

docker-compose.yml

version: '3.4'

services:
  sampleapi:
    image: ${DOCKER_REGISTRY-}sampleapi
    ports:
      - "7001:80"
    networks:
      - ecnetwork
    build:
      context: .
      dockerfile: SampleAPI/Dockerfile

  gateway:
    image: ${DOCKER_REGISTRY-}gateway
    ports:
      - "7000:80"
    networks:
      - ecnetwork
    build:
      context: .
      dockerfile: Gateway/Dockerfile


  myeurekaserver:
    image: ${DOCKER_REGISTRY-}myeurekaserver
    ports:
      - "8761:8761"
    networks:
      - ecnetwork
    build:
      context: .
      dockerfile: MyEurekaServer/Dockerfile

networks:
  ecnetwork:
    external: true

Когда я запускаю команду docker-compose up и проверяю http://localhost:8761/, я обнаруживаю, что мои услуги были зарегистрирован на сервере eureka, но я запускаю http://localhost:7000/sample-api/order Он возвращает

localhost в настоящее время не может обработать этот запрос. ОШИБКА HTTP 500

Я проверил окно консоли, значит, шлюз API может обнаруживать службы, вот журнал.

gateway_1     | dbug: Steeltoe.Discovery.Eureka.DiscoveryClient[0]
gateway_1     |       FetchRegistryDelta returned: OK
gateway_1     | dbug: Steeltoe.Discovery.Eureka.DiscoveryClient[0]
gateway_1     |       FetchRegistry succeeded

person Programmer    schedule 05.09.2019    source источник
comment
Вы пытались залезть в контейнер шлюза и свернуть myeurekaserver?   -  person Alex Kovanev    schedule 05.09.2019
comment
Подходит ли имя вашего контейнера myeurekaserver вашей конфигурации?   -  person Alex Kovanev    schedule 05.09.2019
comment
Есть ли в журнале веб-службы какие-либо записи, указывающие на то, что он получил какой-либо трафик?   -  person Tim    schedule 13.09.2019


Ответы (2)


Это ошибка приложения, проверьте шлюз API вашего приложения.

внутренняя ошибка сервера 500

Общее сообщение об ошибке, которое выдается, когда возникла непредвиденная ситуация, и более конкретное сообщение не подходит

Попробуйте отладить свое приложение без Docker.

person Yasen    schedule 05.09.2019
comment
Я пробовал, он отлично работает на локальном компьютере без докера. - person Programmer; 05.09.2019
comment
для локальных я заменил myeurekaserver на localhost в appsettings - person Programmer; 05.09.2019

Проверь в докере на каком порту прописан сервис 7000 или 80? Затем посмотрите, доступен ли вам порт 7000 локально по telnet

person kiranNswamy    schedule 05.09.2019