无法在Docker中链接Consul和Spring Boot应用程序

时间:2016-07-26 13:31:06

标签: docker spring-boot docker-compose spring-cloud consul

我有一个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 refused。

我完全不知道为什么它无法连接到Consul,因为我可以连接到其他系统,例如在其他应用程序中,rabbitmq就是这样。

感谢您的任何想法!

1 个答案:

答案 0 :(得分:1)

如果您在容器启动时尝试立即连接,那么领事尚未准备好接收连接。

您需要编写一个入口点脚本来等待连接可用,甚至只需重试连接几次。有关详细信息,请参阅https://docs.docker.com/compose/startup-order/