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

Dockerized Spring Boot 应用程序连接到主 MySQL [重复]

使用自定义 docker 网络的 2 个 dockerized spring boot 应用程序之间的通信