Обнаружение службы с помощью 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

2 ответа

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

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

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

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

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

Другие вопросы по тегам