【发布时间】:2021-11-23 15:11:26
【问题描述】:
我正在尝试获取一个 api 网关,以便能够根据 URL 成功地将请求重定向到正确的 Spring Boot 微服务。当我在本地运行项目时,以下application.yml 配置有效,但是当我通过docker-compose up 运行这些服务时,api 网关似乎无法找到这些服务:
server:
port:8080
spring:
cloud:
gateway:
routes:
- id: user_service
uri: 'http://localhost:8001'
predicates:
- Path=/api/users/**
- id: user_service
uri: 'http://localhost:8001'
predicates:
- Path=/api/business/**
- id: book_service
uri: 'http://localhost:8000'
predicates:
- Path=/api/books/**
- id: payment_service
uri: 'http://localhost:8002'
predicates:
- Path=/api/payment/**
我在进行邮递员测试时遇到的错误,例如:localhost:8080/api/books 是一个
finishConnect(..) failed: Connection refused: localhost/127.0.0.1:8000
这是我的 docker-compose.yml:
version: '3.9'
services:
api-gateway:
image: perrywinkle/api-gateway:latest
ports:
- '8080:8080'
build:
context: BackEnd/bk_api_gateway
dockerfile: Dockerfile
bookeroo-frontend:
image: perrywinkle/bookeroo-frontend:latest
ports:
- 3000:3000
build:
context: FrontEnd/myfirstapp
dockerfile: Dockerfile
stdin_open: true
command: npm start
books-ms:
image: perrywinkle/books-ms:latest
ports:
- '8000:8000'
build:
context: BackEnd/bookmicroservices
dockerfile: Dockerfile
volumes:
- /data/bookeroo-db
login-ms:
image: perrywinkle/login-ms:latest
ports:
- '8001:8001'
build:
context: BackEnd/loginmicroservices
dockerfile: Dockerfile
volumes:
- /data/bookeroo-db
payment-ms:
image: perrywinkle/payment-ms:latest
ports:
- '8002:8002'
build:
context: BackEnd/paymentmicroservices
dockerfile: Dockerfile
volumes:
- /data/bookeroo-db
我还应该提到我的前端节点应用程序也遇到了这个问题(它无法通过托管在 8080 上的网关访问微服务)。
localhost 不能很好地与 docker-compose 配合使用吗?我已经在堆栈溢出时尝试了各种相关线程的解决方案(例如将 url 静态更改为 0.0.0.0 等),但到目前为止,它们都没有为我工作。任何意见将不胜感激。
更新
将 application.yml 更改为此后,响应现在正在传递到服务:
server:
port:8080
spring:
cloud:
gateway:
routes:
- id: user_service
uri: 'login-ms:8001'
predicates:
- Path=/api/users/**
- id: user_service
uri: 'login-ms:8001'
predicates:
- Path=/api/business/**
- id: book_service
uri: 'books-ms:8000'
predicates:
- Path=/api/books/**
- id: payment_service
uri: 'payment-ms:8002'
predicates:
- Path=/api/payment/**
但是,邮递员对localhost:8080/api/books 的测试返回一个完全没有错误的 200 OK 响应,它是空的。我试图查看服务以查看是否有任何错误可能被“吞下”,但似乎并非如此。检查books-ms 日志显示它确实收到了请求,但似乎没有返回任何内容:
Hibernate:
select
book0_.book_id as book_id1_0_,
book0_.book_author as book_aut2_0_,
book0_.book_category as book_cat3_0_,
book0_.book_image_url as book_ima4_0_,
book0_.book_isbn as book_isb5_0_,
book0_.book_price as book_pri6_0_,
book0_.book_published_date as book_pub7_0_,
book0_.book_summary as book_sum8_0_,
book0_.book_title as book_tit9_0_,
book0_.price_currency as price_c10_0_
from
books book0
【问题讨论】:
标签: docker docker-compose port