Docker 与 Spring Boot 应用程序组合

Posted

技术标签:

【中文标题】Docker 与 Spring Boot 应用程序组合【英文标题】:Docker compose with Spring Boot Applications 【发布时间】:2020-06-17 00:28:09 【问题描述】:

我有两个图像——调用者和可调用者。

当使用 docker compose 并从调用者图像容器中点击可调用的 url 时,它不起作用。

我的 docker 撰写文件

version: "3.7"
services:

  callerc:
    image: caller:1.0
    ports:
      - "8000:8084"
    environment:
      - URL=callmec/callMe
  callmec:
    image: callable:1.0
    ports:
      - "5000:8082"

我得到的 URI 不是绝对的。当我尝试将 URL 参数设置为 - http://callmec/callMe" 时,它也不起作用并说连接被拒绝。 但是当我将 URL 作为我的机器 IPv4 地址 - http://172.XX.XX.XX:5000/callMe 时,它可以工作。

在尝试“localhost:8000/callOtherService”时出现连接被拒绝错误 - “callmec:5000/callMe”:连接被拒绝

如果我错过了什么,请指导。

【问题讨论】:

不清楚,你在问什么。你想从 docker 的主机或堆栈的另一个容器(callerc)访问容器吗?在这两种情况下,您似乎都缺少 url 中的端口。 添加了端口号,它工作但通过 172.XX.XX.XX:5000/callMe 但尝试“localhost:8000/callOtherService”连接时出现连接被拒绝错误 - “callmec:5000/callMe”:连接被拒绝 把 URL=callmec:8082/callMe 工作了 【参考方案1】:

引用容器时不指定端口:http://callmec/callMe。 它使用默认的 HTTP 端口 (80),例如 http://callmec:80/callMe。 但似乎没有套接字在 callmec 容器上侦听该端口。 你想要的是:http://callmec:8082/callMe

【讨论】:

他说使用 docker 主机的 IP 可以正常工作,所以这不是端口问题 @Simon Martinelli 我知道,但它以这种方式在主机上工作是没有意义的。在我的回答中,我关注的是在 HTTP 中请求容器上的应用程序的方式。 无论如何,这个问题还不清楚。不确定回答这个问题是个好主意。 172.XX.XX.XX:5000/callMe - 它的工作原理是这样的......我也会尝试提供端口号callmec:5000/callMe...... 在尝试“localhost:8000/callOtherService”时出现连接被拒绝错误 - “callmec:5000/callMe”:连接被拒绝【参考方案2】:

callmec 不是 172.XX.XX.XX 的名称条目

如果您想为 Docker IP 172.XX.XX.XX 使用本地名称,则必须将其添加到您的主机文件中:

在 Linux 上,您必须修改 /etc/hosts 文件。

请阅读此文档以了解您必须如何在其他操作系统上执行此操作:https://support.rackspace.com/how-to/modify-your-hosts-file/

【讨论】:

以上是关于Docker 与 Spring Boot 应用程序组合的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot + MySQL docker 容器

无法将 mysql docker 容器与 Spring Boot 应用程序链接 - 通信链接失败

将 MySQL 和 Spring Boot 应用程序与 docker 一起使用时出错

Docker决战到底 使用多阶段构建Spring Boot应用镜像

在 docker-compose 中将 mongodb 与 spring-boot 应用程序连接时出现此错误

Docker环境下Spring Boot应用内存飙升分析与解决