Api 网关看不到 docker 容器中的其他服务

Api Gateway not see other services in docker container

我在使用 docker-compose 对我的小型微服务项目进行容器化时遇到问题。在构建并在下面编写之后,我看到一切正常,所有服务都是 运行,但现在我有一个问题。我的 api-gateway 服务没有连接到其他服务,当 api-gateway 试图向 eq 发出请求时。 account-service 然后控制台给我这个:

api-gateway  | [Nest] 1  - 05/21/2022, 9:38:51 PM   ERROR [ExceptionsHandler] connect ECONNREFUSED 127.0.0.1:3002

所以,我认为问题出在我的容器中,在他的所有服务之间。

有人能告诉我我做错了什么吗?

这是我的 docker-compose.yml

version: '3'

networks:
  backend:
    driver: bridge
    
services:
  api:
    container_name: api-gateway
    build:
      context: .
      dockerfile: ./apps/api/Dockerfile
    restart: always
    hostname: api
    env_file:
      - .env
    ports:
      - "3000:3000"
    networks:
      - backend
  account:
    container_name: account-service
    build:
      context: .
      dockerfile: ./apps/account/Dockerfile
    restart: always
    hostname: account
    env_file:
      - .env
    ports:
      - "3001:3001"
    networks:
      - backend
  workspace:
    container_name: workspace-service
    build:
      context: .
      dockerfile: ./apps/workspace/Dockerfile
    restart: always
    hostname: workspace
    env_file:
      - .env
    ports:
      - "3002:3002"
    networks:
      - backend

Docker 文件

FROM node:14.8.0-alpine as develop

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install
COPY . .

RUN npm run build workspace

CMD node dist/apps/workspace/main

Dockerfile 对于所有服务都是一样的。

感谢您的帮助!

在 docker compose 中,服务在与其容器名称(在本例中为 api-serviceaccount-serviceworkspace-service)或其容器名称相对应的主机名下相互可用名称(apiaccountworkspace)如果未设置容器名称。

因此,为了在服务中发出请求,您需要将请求发送至

"http://workspace-service:3002"

而不是

"http://localhost:3002"