如何在春季启动bootstrap.yml文件中获取docker ip和端口

时间:2019-05-02 08:45:22

标签: spring-boot docker docker-machine spring-boot-actuator spring-cloud-config

我正在尝试在领事中为我的微服务应用程序配置运行状况检查,该应用程序将在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。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

在Docker容器中运行时可能会遇到的问题是,当尝试恢复hostnameIP Address时,您将获得内部Docker hostname和内部{{1 }}。

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

  • 在创建容器时注入Docker主机的主机名。
  • 将容器端口暴露在Docker主机中

例如:

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

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

    HOSTNAME

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

希望有帮助。