【问题标题】:Service discovery with eureka is not working in docker container使用 eureka 的服务发现在 docker 容器中不起作用
【发布时间】:2020-01-08 05:23:23
【问题描述】:

当我在 docker 容器中运行我的 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"
    }
  }
}

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

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

【问题讨论】:

  • 您是否尝试进入您的网关容器并 curl myeurekaserver?
  • 您的 myeurekaserver 容器名称是否适合您的配置?
  • 网络服务上是否有任何日志条目表明它已收到任何流量?

标签: asp.net-core docker-compose microservices ocelot steeltoe


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    500 内部服务器错误

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

    尝试在不使用 Docker 的情况下调试您的应用程序。

    【讨论】:

    • 我试过了,它在没有 docker 的情况下在本地工作得很好。
    • 对于本地我将myeurekaserver 替换为localhost in appsettings
    猜你喜欢
    • 2020-09-06
    • 2018-09-02
    • 2018-07-29
    • 2019-03-07
    • 2018-09-15
    • 2017-02-20
    • 2020-05-22
    • 2020-08-28
    • 2016-06-26
    相关资源
    最近更新 更多