如何在Spring Boot Bootstrap.yml文件中获取Docker IP和端口



我试图在领事中配置我的微服务应用程序的健康检查,该应用将在docker容器中运行。

为了配置执行器健康检查到领事,我尝试使用$ {server.address}进行主机地址,但它给了我Docker容器ID。

这是Bootstrap.yml

spring:
  cloud:
    consul:
      scheme: http
      host: consul.service.consul
      port: 8500
      config:
        format: YAML
        prefix: apps
        data-key: config
        default-context: ${spring.application.name}
      discovery:
        health-check-path: /actuator/health
        healthCheckInterval: 20s
        scheme: http
        enabled: true
        address: ${server.address}
  main:
    allow-bean-definition-overriding: true

在没有Docker的本地,它可以正确解析地址,但是使用Docker在远程返回容器ID。

有什么建议?

在码头容器内运行时可能会遇到的问题是,尝试恢复hostnameIP Address时,您将获得内部Docker hostname和内部IP Address

我在类似问题中使用的解决方案是:

  • 在创建容器时,注入Docker主机的主机名。
  • 公开Docker主机中的容器端口

例如:

  • 设置属性以从外部获取地址:

    discovery:
       health-check-path: /actuator/health
       healthCheckInterval: 20s
       scheme: http
       enabled: true
       address:${HOSTNAME:server.address}
    
  • 运行容器时,提供HOSTNAME属性的值:

    docker run -e HOSTNAME=myhostname.mydomain.com -p 8500:8500 my_docker_image
    

这样,您在服务中定义的终点都可以从外部进行健康检查的任何人访问。

希望它有帮助。

最新更新