与Spring Boot Docker容器进行服务间RestTemplate通讯时出现问题

时间:2019-06-17 19:11:47

标签: java spring-boot docker docker-compose microservices

我正在尝试使用docker容器设置springboot之间的平稳服务通信。

调用链如下:

pdf-generation-orchestrator> ms-template-data-binder> ms-html-to-pdf

当前两个服务不在docker中时,它们可以与第三个docker实例进行对话,即ms-html-to-pdf服务。

但是,当我为这3个服务设置docker容器时,前两个不能互相交谈。

3个服务的docker容器通过docker compose文件... up cmd启动了

注意:在pdf-generation-orchestrator应用程序.yml中指定的ms-template-data-binder网址如下:

模板:   数据绑定器:     基本网址:http://ms-template-data-binder:8080

当我按如下方式访问pdf-generation-orchestrator时:

curl -m 10 -X GET http://localhost:8001/pdf/v2 | base64 -D > test.pdf

我在docker compose控制台中遇到以下错误:

2019-06-17 18:34:55.275错误1 --- [nio-8001-exec-1] oaccC [。[。[/]。[dispatcherServlet]:Servlet [dispatcherServlet]的Servlet.service()在路径为[]的上下文中引发异常[请求处理失败;嵌套的异常是org.springframework.web.client.ResourceAccessException:POST请求“ http:// localhost :8080 / template / data-bind-pdf”时发生I / O错误:连接被拒绝(连接拒绝);嵌套异常是java.net.ConnectException:根本原因导致的连接被拒绝(连接被拒绝)

我无法理解错误堆栈中本地主机的来源:

以下是我的docker撰写文件:

version: "2.1"
services:

  ms-html-to-pdf:
    image: nexus.cloud.uk:1000/shared/ms-html-to-pdfa:branch-develop
    networks:
      - api
    expose:
      - 1111
    ports:
      - 1111:1111
    volumes:
      - ./ms-html-to-pdfa/dev.yml:/opt/ms-html-to-pdfa/config.yml

  ms-template-data-binder:
    image: nexus.cloud.uk:1000:5000/poc/templ-data-binder:branch-develop
    networks:
      - api
    expose:
      - 8080
    ports:
      - 8080:8080

  pdf-generation-orchestrator:
    image: nexus.cloud.uk:1000:5000/poc/pdfgen:branch-develop
    networks:
      - api
    expose:
      - 8001
    ports:
      - 8001:8001

networks:
  api:
    driver: bridge

任何帮助将不胜感激,因为我是docker compose的新手等

1 个答案:

答案 0 :(得分:0)

问题是springboot本地主机8080的默认值需要在docker compose中覆盖。

我在客户端/管弦乐队服务下的docker compose文件中添加了一些环境变量,如下所示:

environment:
      - TEMPLATER_HOST_NAME=http://ms-template-data-binder:8080
      - PDF_GEN_HOST_NAME=http://ms-html-to-pdf:1111

然后,调用springboot微服务的application.yml进行了如下更新:

template:
  data-binder:
    base-url: ${TEMPLATER_HOST_NAME:http://localhost:8080}

pdf:
  html-2-pdf:
    base-url: ${PDF_GEN_HOST_NAME:http://localhost:1111}

我还重建并扩展了所有dockers镜像,以确保我从nexus repo下载了最新版本的镜像。

就这样,希望对您有所帮助。