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 应用程序组合的主要内容,如果未能解决你的问题,请参考以下文章
无法将 mysql docker 容器与 Spring Boot 应用程序链接 - 通信链接失败
将 MySQL 和 Spring Boot 应用程序与 docker 一起使用时出错
Docker决战到底 使用多阶段构建Spring Boot应用镜像