天道酬勤,学无止境

无法在 Docker 中链接 Consul 和 Spring Boot 应用程序(Cannot link Consul and Spring Boot app in Docker)

问题

我有一个具有以下配置的 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:连接被拒绝。

我完全不知道为什么它不能连接到 Consul,因为我可以完全以这种方式连接到其他系统,例如其他应用程序中的 rabbitmq。

谢谢你的任何想法!

回答1

如果您尝试在容器启动时立即连接,则 consul 可能尚未准备好接收连接。

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

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Cannot link Consul and Spring Boot app in Docker
    I have a Spring Boot app with the following config: 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}} that I want to run with 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: -
  • Prometheus 使用 Consul 自动发现 Spring Boot 服务并拉取数据
    Prometheus 使用 Consul 自动发现 Spring Boot 服务并拉取数据 使用 Prometheus监控 SpringBoot 应用,当应用很多,且上下线频繁时,需要不断的更改 Prometheus 的配置文件,不能灵活的使用,可以通过为 Prometheus配置注册中心,从注册中心拉取应用数据获取监控数据 启动 Prometheus 添加配置文件 prometheus.yaml mkdir -p ~/docker/prometheus/config vi ~/docker/prometheus/config/prometheus.yml global: scrape_interval: 15s scrape_timeout: 10s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: [] scheme: http timeout: 10s api_version: v1 scrape_configs: - job_name: prometheus honor_timestamps: true scrape_interval: 15s scrape_timeout: 10s metrics_path: /metrics scheme: http static
  • Spring Cloud学习核心功能和核心组件(第一天)
    一、Spring Cloud简介 尽管Spring Cloud带有“Cloud”的字样,但它并不是云计算解决方案,而是在Spring Boot基础上构建的,用于快速构建分布式系统的通用模式的工具集。 使用Spring Cloud开发的应用程序非常适合在Docker或者PaaS(例如Cloud Foundry)上部署,所以又叫做云原生应用(Cloud Native Application)。云原生(Cloud Native)可简单理解为面向云环境的软件架构。 二、核心功能 Distributed/versioned configuration 分布式/版本化的配置管理Service registration and discovery 服务注册与服务发现Routing 路由Service-to-service calls 端到端的调用Load balancing 负载均衡Circuit Breakers 断路器Global locks 全局锁Leadership election and cluster state 选举与集群状态管理Distributed messaging 分布式消息 三、核心组件 Spring Cloud Config Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。方便部署与运维。分客户端、服务端。
  • Spring Cloud 各组件的简述及都有什么用
    Table of Contents 简述 Netflix Config Bus CloudFoundry Open Service Broker Cluster Consul Security Sleuth Data Flow Stream Stream APP Starters Task Task APP Starters Zookeeper OpenFeign Gateway Contract Pipelines 简述 Spring Cloud 提供了配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选分布式会话和集群状态管理等,一系列的解决方案 Config:配置管理工具,支持 git 存储配置实现应用外部配置化,支持远程客户端读取配置并根据初始化参数启动项目Netflix:核心组件Eureka:服务治理组件,可以注册服务接口中心Hystrix:容错管理组件,实现断路器模式,服务依赖中出现的延迟和故障提供容错性Ribbon:客户端负载均衡服务调用组件Feign:基于 Hystrix 和 Ribbon 声明式服务调用组件Zuul:提供路由,访问过滤Archaius:外部化配置参数组件Bus:事件消息总线,用于将服务和服务实例与分布式消息传递连接在一起的事件总线。触发后续作业的业务联动性Cluster:针对 Zookeeper、Redis、Hazelcast
  • 0006. docker consul安装以及集成springcloud H 踩坑
    docker consul安装以及集成springcloud H 踩坑 docker 安装 consul删除无效服务、无效节点springBoot 2.2 / springCloud H 注册服务到 Consul1.6.1踩坑springboot consul 配置详解 docker 安装 consul 拉取镜像 [root@centos7docker ~] docker pull consul:1.6.1 [root@centos7docker ~] docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/consul 1.6.1 48b314e920d6 8 months ago 116 MB 运行镜像 [root@centos7docker ~] docker run --name consul-01 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul:1.6.1 agent -dev -server -bootstrap-expect 1 -ui -bind=0.0.0.0 -client=0.0.0.0 8500 http 端口,用于 http 接口和 web ui 8300 server rpc 端口
  • 用阿里云K8S搭建SpringCloud(服务发现:Consul)微服务--问题小结
    导言 公司原有的微服务是基于Eureka做微服务microservice间的服务发现,以及通过阿里云的Loadbalance设施实现gateway层的负载,以及通过流量权重切换实现分批发布。 原来的方式保证了一定程度的微服务化,把很多重要服务的领域边界都可以划分清楚,几乎很少的服务间请求,所有的数据都在gateway层通过rxJava进行并行io请求和数据组装。保证了业务的灵活性和扩展性。 随着公司业务发展,今年开始有一块跟原来业务区别较大的新产品规划。如果再按eureka去搭一套的话,机器资源是相对浪费的,而且eureka目前的社区活跃度也低,以及netflix对其减少维护等原因,更多还是考虑新业务的扩展性较强,业务在做尝试,有很多未知数,所以要有更敏捷高效的部署和构建设施。阿里云的k8s基本配套还是很全的,在最初搭建的过程会麻烦一些,但是后续的服务扩展、微服务的灵活性、部署的效率都会提升很多。因为新的架构和项目,所以也基本用了较新版本的三方包(原来用的是springBootVersion 1.5.x)。全文基于的三方包版本如下: springBootVersion = "2.3.0.RELEASE" springCloudVersion = "2.2.4.RELEASE"(cloud-consul,cloud-openfeign版本) springVersion = "5.2
  • 最新的SpringCloud(H版&Alibaba)技术(5-7初级部分,注册中心【Eureka、Zookeeper和Consul】)
    文章目录 五、Eureka服务注册与发现Eureka基础知识服务治理服务注册Eureka两组件 单机Eureka构建步骤IDEA生成eurekaServer端服务注册中心1. 建module2. 改pom3. 写yml4. 主启动5. 测试 将EurekaClient端8001注册进EurekaServer成为服务提供者provider将EurekaClient端80注册进EurekaServer成为服务消费者consumer 集群Eureka构建步骤原理说明构建eurekaServer集群环境将支付服务8001和订单服务80微服务发布到集群配置中构建支付服务提供者集群环境 actuator微服务信息完善服务发现Discovery修改提供者集群的controller测试 Eureka自我保护概述导致原因 禁止自我保护 六、Zookeeper服务注册与发现注册中心Zookeeper服务节点是临时节点还是持久节点? 服务提供者服务消费者 七、Consul服务注册与发现简介主要特点在docker上安装启动consul 服务提供者服务消费者 三者的异同点 五、Eureka服务注册与发现 Eureka基础知识 服务治理 服务注册 Eureka两组件 单机Eureka构建步骤 IDEA生成eurekaServer端服务注册中心 1. 建module cloud-eureka
  • SpringCloud 使用Docker搭建Consul节点集群
    一、Docker 环境Consul 集群搭建 1,准备工作,为后面要创建的容器准备consul数据卷 我们在linux 主机上任意一个目录下创建三个不同的目录,为后面创建容器时创建不同的数据容器卷使用。并在每个不同的目录下上传consul安装包,使用unzip命令解压安装包。如在/home/consul/目录下创建了三个子目录分别为 docker_consul_1 2 3 。每个目录下面都解压安装了consul安装包。 2,基于centos镜像分别创建不同的docker容器 我们在使用docker搭建consul容器环境使用的基础镜像为centos镜像 使用docker images 命令查看镜像列表如下: 然后我们使用该镜像创建并启动consul docker 容器: docker run -it -p 9501:8500 --name server_1 -v /home/consul/docker_consul_1:/home --privileged=true 0d120b6ccaa8 /bin/bash docker run -it -p 9502:8500 --name server_2 -v /home/consul/docker_consul_2:/home --privileged=true 0d120b6ccaa8 /bin/bash docker run -it
  • Spring Boot 执行器运行状况返回 DOWN(Spring Boot Actuator Health Returning DOWN)
    问题 当我从 Spring Boot 应用程序 (1.2.4.RELEASE) 访问/health端点时,它返回DOWN状态: { status: "DOWN" } 是否有任何已知会覆盖状态的入门项目或库? 有没有其他原因(除了编写自定义的)为什么会返回DOWN ? 回答1 在您的 Spring 属性中,设置endpoints.health.sensitive = false 。 然后/health端点将返回各种健康指标的列表,您可以从那里进行调试。 对于生产环境,您应该在/health端点周围启用安全性。 编辑 正如文森特在下面指出的,如果健康端点是安全的,您还需要management.security.enabled = false ,这似乎是更新版本的 Spring Boot 中的默认设置。 我在 Spring Boot 中看到的一个常见问题是它会自动配置 Solr,并且在没有额外配置的情况下, /health端点指示 Solr 为DOWN 。 解决此问题的一种简单方法是使用以下注释在 Application.java 中禁用 Solr 自动配置: @SpringBootApplication(exclude={SolrAutoConfiguration.class}) 回答2 如果运行状况 url 显示“DOWN”或 HTTP 503 - Service
  • 环境变量和@Value 不能在 Spring Boot 上一起工作(Environment variables and @Value can't work together on Spring Boot)
    问题 我有一个 Spring 启动应用程序,它连接到一个用作缓存的 Redis 实例。 当我在开发环境中时,我有以下内容: --- spring: profiles: default redis: host: localhost port: 6379 而我的缓存配置类是这样的: @Configuration @EnableCaching public class CacheConfiguration { @Value("${redis.host}") String redisHost; @Value("${redis.port}") int redisPort; 在生产中,这个应用程序是 Dockerized,我有以下docker-compose.yml文件: redis: image: tutum/redis ports: - "6379:6379" volumes: - /data app: build: . ports: - "8080:8080" links: - redis application.yml是: --- spring: profiles: docker redis: host: redis port: 6379 要在 Docker 上启动应用程序,我使用-Dspring.profiles.active=docker运行,但是当应用程序启动时,会发生以下错误:
  • SpringCloud简介
    Spring Cloud是什么?SpringCloud官网:http://spring.ioSpring Cloud是一个一站式的开发分布式系统的框架,为开发者提供了一系列的构建分布式系统的工具集。Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(比如:配置管理,服务发现,断路器,智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等)。开发分布式系统都需要解决一系列共同关心的问题,而使用Spring Cloud可以快速地实现这些分布式开发共同关心的问题,并能方便地在任何分布式环境中部署与运行。Spring Cloud这个一站式地分布式开发框架,被近年来流行的“微服务”架构所大力推崇,成为目前进行微服务架构的优先选择工具。Spring Cloud基于Spring Boot框架构建微服务架构,学习Spring Cloud需要先学习Spring Boot。Spring Cloud利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring
  • Eureka 2.X 停止开发,但注册中心还有更多选择:Consul 使用详解
    在上个月我们知道 Eureka 2.X 遇到困难停止开发了,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka 1.X 系列,另一方面 Spring Cloud 支持很多服务发现的软件,Eureka 只是其中之一,下面是 Spring Cloud 支持的服务发现软件以及特性对比: Feature euerka Consul zookeeper etcd 服务健康检查 可配支持 服务状态,内存,硬盘等 (弱)长连接,keepalive 连接心跳 多数据中心 — 支持 — — kv 存储服务 — 支持 支持 支持 一致性 — raft paxos raft cap ap ca cp cp 使用接口(多语言能力) http(sidecar) 支持 http 和 dns 客户端 http/grpc watch 支持 支持 long polling/大部分增量 全量/支持long polling 支持 支持 long polling 自身监控 metrics metrics — metrics 安全 — acl /https acl https 支持(弱) spring cloud 集成 已支持 已支持 已支持 已支持 在以上服务发现的软件中,Euerka 和 Consul 使用最为广泛。如果大家对注册中心的概念和 Euerka 不太了解的话, 可以参考我前期的文章
  • 第18章 Docker 中 Consul 的安装与配置及使用
    第18章 Docker 中 Consul 的安装与配置及使用 文章目录 第18章 Docker 中 Consul 的安装与配置及使用前言目标环境介绍快速参考(Quick reference)什么是Consul ?Consul and DockerUsing the Container`dumb-init``consul members``VOLUME /consul/data``/consul/config``--net=host` Running Consul for DevelopmentRunning Consul Agent in Client ModeRunning Consul Agent in Server ModeExposing Consul's DNS Server on Port 53(在端口53上公开Consul的DNS服务器)Service Discovery with Containers(使用容器进行服务发现)Running Health Checks in Docker Containers(在Docker容器中运行状况检查)LicenseConsul ArchitectureCLIENTSERVERSERVER-LEADER其它信息
  • 微服务系列之 Consul 服务注册中心
    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 原文链接:https://mrhelloworld.com/posts/spring/spring-cloud/consul-service-registry/   Netflix Eureka 2.X https://github.com/Netflix/eureka/wiki 官方宣告停止开发,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka 1.X 系列,并且官方也在积极维护 1.X https://github.com/Netflix/eureka/releases。 The existing open source work on eureka 2.0 is discontinued. The code base and artifacts that were released as part of the existing repository of work on the 2.x branch is considered use at your own risk. Eureka 1.x is a core part of Netflix's service discovery system and is still an active project. 翻译: 有关 eureka 2
  • han_Spring cloud
    为什么要学习Spring cloud不论是商业应用还是用户应用,在业务初期都很简单,我们通常会把它实现为单体结构的应用,但是,随着业务逐渐发展,产品思想会变得越来越复杂,单体结构的应用也会越来越复杂。这就会给应用带来如下的几个问题:代码结构混乱:业务复杂,导致代码量很大,管理会越来越困难。同时,这也会给业务的快速迭代带来巨大挑战;开发效率变低:开发人员同时开发一套代码,很难避免代码冲突。开发过程中会伴随着不断解决冲突的过程,这会严重影响开发效率;排查解决问题成本高:线上业务发现bug,修复bug过程可能很简单。但是,由于只有一套代码,需要重新编译、打包、上线,成本很高。由于单体结构的应用随着系统复杂度的增高,会暴露出各种各样的问题。近些年来,微服务架构逐渐取代了单体架构,且这种趋势将会越来越流行。Spring Cloud 是目前最常用微服务开发框架,已经在企业级开发中大量应用。什么是Spring CloudSpring Cloud是一系列框架的有序集合。它利用Spring Boot 的开发便利巧妙的简化了分布式系统基础设施的开发,如服务发现注册、配置中心、只能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来
  • SpringCloud 注册中心之Consul
    【转载请注明出处】:https://blog.csdn.net/huahao1989/article/details/106417880 Consul 介绍 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。使用起来也较 为简单。Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。 Consul 的优势: 使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft。 支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等。 zookeeper 和 etcd 均不提供多数据中心功能的支持。 支持健康检查。 etcd 不提供此功能。 支持 http 和 dns 协议接口。 zookeeper
  • Spring Cloud入门-十分钟了解Spring Cloud
    文章目录 Spring Cloud入门系列汇总为什么需要学习Spring Cloud什么是Spring Cloud设计目标与优缺点设计目标优缺点 Spring Cloud发展前景整体架构主要项目Spring Cloud ConfigSpring Cloud NetflixSpring Cloud BusSpring Cloud ConsulSpring Cloud SecuritySpring Cloud SleuthSpring Cloud StreamSpring Cloud TaskSpring Cloud ZookeeperSpring Cloud GatewaySpring Cloud OpenFeign Spring Cloud的版本关系Spring Cloud和SpringBoot版本对应关系Spring Cloud和各子项目版本对应关系 和Spring Boot的关系 Spring Cloud入门系列汇总 序号内容链接地址1Spring Cloud入门-十分钟了解Spring Cloudhttps://blog.csdn.net/ThinkWon/article/details/1037151462Spring Cloud入门-Eureka服务注册与发现(Hoxton版本)https://blog.csdn.net/ThinkWon/article/details
  • (七)Docker网络和 overlay跨主机通讯
    容器和宿主机、容器之间以及夸主机容器如何通讯呢?这就需要使用到Docker网络。在前面的介绍中我们在Dockerfile中通过EXPOSE参数来设置容器暴露的端口,让在docker run中使用-p来设置宿主机端口到容器端口的映射,这只是最简单的宿主机和容器通讯,同样使用宿主机IP:PORT方式可以让其他容器和该容器通讯,但是这样有个问题,首先应用程序需要对IP进行硬编码,其次容器每次重启IP都会变化,显然在生产环节中应该做到的尽可能的解耦,下面我们先看一下Docker网络的构成。查看网络设置启动docker服务就会产生一个docker0的虚拟网桥(多端口虚拟交换机)设备。veth*这个是启动一个容器就会产生一个这样的设备该设备与容器内的eth0虚拟网卡对应,这个veth*你可以理解为某个网桥上的接口,所以它只有MAC地址而没有IP地址,毕竟二层交换机网口是没有IP地址的,这个接口的另外一端就插在容器的网卡上,这个网卡有IP也有MAC(也可以理解为一根连在docker0上的网线,毕竟容器内的网卡和容器外的是一对,460就是容器外ID,459就是容器内网卡的ID)网桥在内核层连通了其他物理或者虚拟网卡。下面看一下docker run命令中和网络有关的参数:--dns=IP #指定DNS服务器 --dns-search=DOMAIN #指定搜索域 -h HOSTNAME
  • Maven和Spring Boot-无法解析的父pom-repo.spring.io(未知主机)(Maven and Spring Boot - non resolvable parent pom - repo.spring.io (Unknown host))
    问题 我正在尝试构建我的项目,但是我得到了: 不可解析的父POM:无法从/到spring-snapshots传输工件org.springframework.boot:spring-boot-starter-parent:pom:1.3.0.M3(http://repo.spring.io/snapshot) :repo.spring.io和'parent.relativePath'指向没有本地POM的@ 16行,第10列:未知主机repo.spring.io-> [帮助2] 这是我指定pom.xml的父级的方法: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.0.M3</version> <relativePath></relativePath> </parent> 是空的,因此它迫使Maven在远程存储库中寻找父级。 但是,它说repo.spring.io是一个未知主机。 这是我在pom.xml中定义存储库的方式: <repositories> <repository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot<
  • Docker+Consul+registrator实现服务发现及nginx反向代理
    更改时间 mv /etc/localtime/etc/localtime. bk cp /usr/share/zoneinfo/Asia/Shanghai/etc/localtime 查看端口 [root@docker01 consul]# ss -lnt Consul:分布式、高可用的,服务发现和配置服务的工具。数据中心 Rigistrator:负责收集dockerhost_上,容器服务的信息,并且发送给consul Consul-tpmplate:根据编辑好的模板,生产新的nginx配置文件,并负责重新加载nginx配置文件 一. 架构设计 在现实中,我们一直渴望着追求提供高质量、高可用的服务架构体系,同时减少不必要的部署和维护代价,减少容错率。面对如此高的要求,可以有两种架构方案: Docker+Etcd+Confd+Nginx Docker+Consul+Nginx 本文中我们主要来介绍 Docker+Etcd+Confd+Nginx方案,此方案更加高效、快捷,并且维护代价和容错率更低,分布式支持力度更强,如下图所示: 上面示意图的大概流程如下: 1、docker01主机上以二进制包的方式部署consul服务并后台运行,其身份为leader; 2、docker02、docker03以容器的方式运行consul服务,并加入到docker01的consul群集中; 3