docker 配置 docker-compose 釋出 apollo,啟動portal報錯,不能從meta server找到admin server
阿新 • • 發佈:2021-02-08
技術標籤: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都已經註冊上去的,這讓我百思不得其解,如下圖所示:
經過不斷探索,在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