【发布时间】:2021-10-03 13:48:10
【问题描述】:
这篇文章链接到我之前的文章,但我想我会发一个新的,因为问题已经转移了。
所以,我试图在 docker compose 文件中获取服务以相互交谈。这是docker-compose.yml:
version: '3.9'
services:
bk-api-gateway:
image: perrywinkle/api-gateway:latest
ports:
- '8080:8080'
build:
context: BackEnd/bk_api_gateway
dockerfile: Dockerfile
frontend:
image: perrywinkle/bookeroo-frontend
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
这里有很多服务,所以我现在只是在尝试解决api网关服务和书籍服务之间的问题。这 2 个具有以下 Dockerfile:
FROM openjdk:11
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} api-gateway.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","api-gateway.jar"]
FROM openjdk:11
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} books-ms.jar
EXPOSE 8000
ENTRYPOINT ["java","-jar","books-ms.jar"]
老实说,这里没有什么值得注意的,但我想我还是会把它们包括在内。
当我尝试使用 localhost:8080/api/books 从浏览器发出 get 请求时,它会返回 empty 200 OK 响应,此时确实应该返回书籍列表,这让我相信我的 api 网关可能有一些问题,它有一些基本路由,形式如下 application.yml(没有 Eureka 服务器或类似的东西):
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/**
如果我访问这些服务之一的 CLI 并从那里 ping 它们(使用ping books-ms 或反之亦然),它们将相互识别。如果我在 api 网关中执行curl books-ms:8000/api/books,它将能够得到预期的响应,这意味着这两个服务之间不应该存在网络问题。
总的来说,我对 docker 很陌生,因此非常感谢任何指导。
【问题讨论】:
标签: java docker docker-compose