Dockerized Spring boot 和 Zuul
Posted
技术标签:
【中文标题】Dockerized Spring boot 和 Zuul【英文标题】:Dockerized Spring boot and Zuul 【发布时间】:2018-11-13 12:09:43 【问题描述】:我在让 Zuul 使用 dockerized Spring boot 应用程序时遇到了麻烦。 似乎 Zuul 无法将请求代理到目标应用程序 (gis_import_export),即使它已启动并正在运行。
我的基于 Zuul 的 Spring 应用配置:
spring:
banner:
location: classpath:banner.txt
zuul:
debug:
request: true
routes:
ie:
url: http://gis_import_export:8080
geoserver:
url: http://geoserver:8080
geonetwork:
url: http://geonetwork:8080
ribbon:
eureka:
enabled: false
还有我的 docker-compose.yml 文件:
version: "3"
services:
geoserver:
image: kartoza/geoserver
geonetwork:
image: geonetwork
postgres:
image: postgres
environment:
- POSTGRES_DB=xxx
- POSTGRES_PASSWORD=xxx
- POSTGRES_USER=xxx
gis_import_export:
image: gis_import_export:develop
ports:
- 8888:8080
zuul:
image: gis_api_gateway:develop
ports:
- 8080:8080
我能够通过 Zuul 服务暴露端口正确代理 geonetwork/geoserver,但我坚持使用 Spring boot 应用程序似乎没有被代理。 顺便说一句,如果通过 8888 端口访问,dockerized Spring boot 应用程序将按预期工作,如果 zuul 本身未通过 Docker 部署,则通过 Zuul 访问。
在 Zuul docker 容器内运行 ping/telnet 到 dockerized spring boot 应用程序按预期工作,因此名称被正确解析。
想法?
谢谢,FB
【问题讨论】:
【参考方案1】:您的服务在不同的 docker networkd 中运行。 您必须在两个文件网络中指定相同的网络。
当然最好为每个容器指定主机名参数
【讨论】:
抱歉迟到了,只需将主机名属性设置为 gis_import_export 服务即可。这对我来说仍然无法解释,因为容器能够使用 dockerfile 中定义的名称相互连接,所以它们在同一个默认网络中。顺便提一句;感谢您的提示。以上是关于Dockerized Spring boot 和 Zuul的主要内容,如果未能解决你的问题,请参考以下文章
dockerized 环境中的 Keycloak 和 Spring Boot Web 应用程序
无法将 dockerized spring boot 应用程序连接到 dockerized postgresql
通过 Dockerized Spring Boot 应用程序填充 Dockerized PostgreSQL 数据库
java.net.UnknownHostException 来自 Spring Boot 应用程序的 dockerized mysql