我试图在领事中配置我的微服务应用程序的健康检查,该应用将在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。
有什么建议?
在码头容器内运行时可能会遇到的问题是,尝试恢复hostname
或IP 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
这样,您在服务中定义的终点都可以从外部进行健康检查的任何人访问。
希望它有帮助。