1. 程式人生 > 其它 >docker 配置 docker-compose 釋出 apollo,啟動portal報錯,不能從meta server找到admin server

docker 配置 docker-compose 釋出 apollo,啟動portal報錯,不能從meta server找到admin server

技術標籤:javaapollodocker-composedockerjavaspring boot

https://github.com/ctripcorp/apollo/issues找到一些關於這個錯誤的文章,說是可以在apollo portal管理頁面測試其他admin、configservice的健康狀態,或者通過configserverip:port/services/admin檢視返回的apollo-admin服務狀態,但是當我們用configserverip:port/services/admin這個地址去測試的時候發現返回為“[]”,這個時候發現在eureka上面config和admin都已經註冊上去的,這讓我百思不得其解,如下圖所示:

eureka 註冊資訊
標題

經過不斷探索,在apollo config service原始碼裡面發現這麼一段:

  @RequestMapping("/admin")
  public List<ServiceDTO> getAdminService() {
    return discoveryService.getServiceInstances(ServiceNameConsts.APOLLO_ADMINSERVICE);
  }

檢視ServiceNameConsts.APOLLO_ADMINSERVICE=apollo-adminservice,然後看了一下自己docker-compose的 配置

apollo-adminservice:
    image: apolloconfig/apollo-configservice:1.7.1
    container_name: apollo-adminservice
    network_mode: "host"
    privileged: true
    environment:
      SERVER_PORT: 6166
      # DataSource Info
      SPRING_DATASOURCE_URL: "jdbc:mysql://mysql.host.com:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=GMT%2B8"
      SPRING_DATASOURCE_USERNAME: "root"
      SPRING_DATASOURCE_PASSWORD: "123456"
      spring.application.name: "apollo-admin-service"
      management.endpoints.web.exposure.include: "*"
      eureka.instance.prefer-ip-address: "true"
      eureka.instance.appname: "apollo-admin-service"
      eureka.instance.instance-id: "$${spring.application.name}:$${spring.application.instance_id:$${server.port}}"
    logging:
      driver: "json-file"
      options:
        max-size: "200k"
        max-file: "10"

發現 spring.application.name和apollo service controller裡面所需要的配置並不正確,於是我改了一下配置

apollo-adminservice:
    image: apolloconfig/apollo-configservice:1.7.1
    container_name: apollo-adminservice
    network_mode: "host"
    privileged: true
    environment:
      SERVER_PORT: 6166
      # DataSource Info
      SPRING_DATASOURCE_URL: "jdbc:mysql://mysql.host.com:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=GMT%2B8"
      SPRING_DATASOURCE_USERNAME: "root"
      SPRING_DATASOURCE_PASSWORD: "123456"
      spring.application.name: "apollo-adminservice"
      management.endpoints.web.exposure.include: "*"
      eureka.instance.prefer-ip-address: "true"
      eureka.instance.appname: "apollo-adminservice"
      eureka.instance.instance-id: "$${spring.application.name}:$${spring.application.instance_id:$${server.port}}"
    logging:
      driver: "json-file"
      options:
        max-size: "200k"
        max-file: "10"

最終沒有報錯了。

結論:

eureka.instance.appname=ServiceNameConsts.APOLLO_ADMINSERVICE
spring.application.name=ServiceNameConsts.APOLLO_ADMINSERVICE