当前位置: 首页 > 知识库问答 >
问题:

Spring boot应用程序在docker中链接领事失败

邓越泽
2023-03-14

我正在尝试使用领事作为发现服务,和另外两个Spring启动应用程序注册与领事;把它们放进码头;

以下是我的代码:app:

server:
  port: 3333

spring:
  application:
    name: adder
  cloud:
    consul:
      host: consul
      port: 8500
      discovery:
        preferIpAddress: true
        healthCheckPath: /health
        healthCheckInterval: 15s
        instanceId: ${spring.application.name}:${spring.application.instance_id:${server.port}}
 consul1:
  image: "progrium/consul:latest"
  container_name: "consul1"
  hostname: "consul1"
  command: "-server -bootstrap -ui-dir /ui"
 adder:
  image: wsy/adder
  ports:
   - "3333:3333"
 links:
   - consul1
 environment:
   WAIT_FOR_HOSTS: consul1:8500
adder_1    | com.ecwid.consul.transport.TransportException: java.net.ConnectException: Connection refused
adder_1    |    at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:80) ~[consul-api-1.1.8.jar!/:na]
adder_1    |    at com.ecwid.consul.transport.AbstractHttpTransport.makeGetRequest(AbstractHttpTransport.java:39) ~[consul-api-1.1.8.jar!/:na]

除了spring boot application.yml和docker-compose.yml之外,下面是app的Dockerfile

FROM java:8

VOLUME /tmp
ADD adder-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ADD start.sh start.sh
RUN bash -c 'chmod +x /start.sh'
EXPOSE 3333
ENTRYPOINT ["/start.sh", " java -Djava.security.egd=file:/dev/./urandom    -jar /app.jar"]

开始的时候.sh

#!/bin/bash

set -e

wait_single_host() {
  local host=$1
  shift
  local port=$1
  shift

  echo "waiting for TCP connection to $host:$port..."

  while ! nc ${host} ${port} > /dev/null 2>&1 < /dev/null
  do
    echo "TCP connection  [$host] not ready, will try again..."
    sleep 1
 done

  echo "TCP connection ready. Executing command [$host] now..."
}

 wait_all_hosts() {
  if [ ! -z "$WAIT_FOR_HOSTS" ]; then
   local separator=':'
   for _HOST in $WAIT_FOR_HOSTS ; do
      IFS="${separator}" read -ra _HOST_PARTS <<< "$_HOST"
      wait_single_host "${_HOST_PARTS[0]}" "${_HOST_PARTS[1]}"
    done
   else
     echo "IMPORTANT : Waiting for nothing because no $WAIT_FOR_HOSTS env var defined !!!"
   fi
  }

  wait_all_hosts

  exec $1

共有1个答案

卫俊誉
2023-03-14

我可以推断您的领事配置位于application.yml中,而不是bootstrap.yml,这就是问题所在。

根据这个答案,bootstrap.yml是在application.yml之前加载的,Consult client必须在应用程序本身之前检查其配置,因此要查看bootstrap.yml

工作bootstrap.yml的示例:

spring:
  cloud:
    consul:
      host: consul
      port: 8500
      discovery:
        prefer-ip-address: true

>

  • 运行Consuler server,不要忘记与您的配置匹配的name选项:

    Docker run-d-p 8500:8500--name=consult progrium/consult-server-bootstrap

    Docker run-d-name=my-consul-client-app--link领事:consular acme/spring-app

  •  类似资料:
    • 我有两个docker容器,它们通过以下命令运行: > docker run——name postgres-v“/Users/xxx/Desktop/Coding/DockerMounting”:/home/-e postgres_PASSWORD=xyz-d postgres docker run-it-v“/Users/xxx/Desktop/Coding/DockerMounting”:/ho

    • 我是码头工人的新手。我用的是Spring boot微服务。它在我的本地机器上运行良好。现在,我需要为我的应用程序创建一个docker图像。它依赖于Mysql服务器。我使用docker-compose来创建我的容器。在运行我的自定义映像(spring boot应用程序)时,我收到一个通信链接失败错误。Mysql镜像独立运行良好。 我的 yml 文件 : 应用程序属性文件 : 完整的错误消息: spr

    • 我有一个Spring Boot应用程序与以下配置: 我希望与docker compose一起运行(docker 1.11.2,docker compose 1.7.1): 不幸的是,这不起作用,我得到:com。埃克维德。领事运输例外:java。网ConnectException:连接被拒绝。 我完全不知道为什么它不能连接到Consul,因为我可以通过这种方式连接到其他系统,例如其他应用程序中的Ra

    • 我试图在SpringMVC中运行SpringBoot应用程序,在SpringMVCPOM中添加SpringBoot应用程序依赖项,并扫描SpringBoot包,但我面临以下问题

    • 我在我的应用程序中启用了应用链接。它工作正常。但是在我的应用程序中,有一些情况下我无法处理传入的网址。在这种情况下,我想将该网址重定向到设备中的默认浏览器。 目前,我尝试使用intent打开带有url的浏览器,但它再次重定向到我的应用程序本身。应用程序链接的格式如下- 所以根据params,我想要么在应用程序本身中处理应用程序链接,要么将其重定向到默认浏览器。下面是我试图用上面的网址打开浏览器的代

    • 问题内容: 我正在尝试为服务发现实施领事,而在两件事上遇到了麻烦:连接到自定义DNS服务器,以及格式化我的请求。 这是我要在go应用程序中查找的内容: 这是相关的代码。(我知道这是错误的,但是这样您就可以看到我正在尝试做的事情) 和输出: 任何帮助,将不胜感激!谢谢 问题答案: 尝试使用更锋利的工具,例如包裹。上次查看它时,它几乎可以控制客户端设置的每一位来进行DNS解析。