无法在 Docker 中链接 Consul 和 Spring Boot 应用程序
Posted
技术标签:
【中文标题】无法在 Docker 中链接 Consul 和 Spring Boot 应用程序【英文标题】:Cannot link Consul and Spring Boot app in Docker 【发布时间】:2016-11-30 04:26:52 【问题描述】:我有一个具有以下配置的 Spring Boot 应用程序:
spring:
thymeleaf:
cache: false
cloud:
consul:
host: consul
port: 8500
discovery:
prefer-ip-address: true
instanceId: $spring.application.name:$spring.application.instance_id:$random.value
我想用 docker-compose(Docker 1.11.2, docker-compose 1.7.1) 运行:
consul:
image: progrium/consul:latest
container_name: consul
hostname: consulhost
ports:
- "8400:8400"
- "8500:8500"
- "8600:53"
command: "-server -bootstrap-expect 1 -ui-dir /ui"
collector-server:
container_name: collector-server
image: io.thesis/collector-server
ports:
- "9090:9090"
links:
- consul:consul
不幸的是,这不起作用,我得到:com.ecwid.consul.transport.TransportException: java.net.ConnectException: Connection denied。
我完全不知道为什么它不能连接到 Consul,因为我可以连接到其他系统,例如rabbitmq 在其他应用程序中正是如此。
感谢您的任何想法!
【问题讨论】:
【参考方案1】:如果您尝试在容器启动时立即连接,则 consul 可能尚未准备好接收连接。
您需要编写一个入口点脚本来等待连接可用,或者甚至只是重试连接几次。请参阅https://docs.docker.com/compose/startup-order/ 了解更多信息。
【讨论】:
谢谢,我会尝试...但我仍然想知道,因为我从来没有用 rabbitmq、mysql 等做过。Consul 启动非常快,日志显示它已经启动在我的 spring 应用程序上下文加载之前。 它适用于 docker-compose v2-format 和 depends_on。非常感谢!以上是关于无法在 Docker 中链接 Consul 和 Spring Boot 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
基于Nginx和Consul构建高可用及自动发现的Docker服务架构
Docker集群实验环境布署--swarm3 注册服务监控与自动发现组件--consul
Docker+Consul+Registrator实现服务自动注册与发现
Docker 中的 Consul 和 Spring Boot 服务 - 不取消注册
docker报错集——consul-template启动后负载均衡无法实现,错误:504 Gateway Time-out