0

当我在 docker 容器中运行我的 API 网关时,它无法找到我在 eureka 中注册的服务。

API 网关

-- 豹猫.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"
    }
  }
}

-- API 网关的 appsettings.json

{
  "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"
    }
  }
}

码头工人-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
4

2 回答 2

0

检查服务在哪个端口上注册的 docker 7000 或 80?然后查看 7000 端口是否可以通过 telnet 在本地访问

于 2019-09-05T12:51:30.903 回答
0

这是一个应用程序错误,请检查您的应用程序 API 网关。

500内部服务器错误

通用错误消息,在遇到意外情况且没有更具体的消息适用时给出

尝试在没有 Docker 的情况下调试您的应用程序。

于 2019-09-05T10:36:58.310 回答