gpt4 book ai didi

node.js - docker-compose 和 traefik 微服务之间的通信

转载 作者:行者123 更新时间:2023-12-02 00:55:10 25 4
gpt4 key购买 nike

我有一个基于微服务的 Node 应用程序。我正在使用 docker、docker-compose 和 traefik 进行服务发现。

此时我有 2 个微服务:

  • 服务器应用程序:运行在 node-app.localhost:8000
  • 运行在 search-microservice.localhost:8002 的搜索微服务

我无法从一个微服务向另一个微服务发出请求的问题。这是我的 docker compose 配置:

# all variables used in this file are defined in the .env file
version: "2.2"
services:
node-app-0:
container_name: node-app
restart: always
build: ./backend/server
links:
- ${DB_HOST}
depends_on:
- ${DB_HOST}
ports:
- "8000:3000"
labels:
- "traefik.port=80"
- "traefik.frontend.rule=Host:node-app.localhost"
reverse-proxy:
image: traefik # The official Traefik docker image
command: --api --docker # Enables the web UI and tells Traefik to listen to docker
ports:
- "80:80" # The HTTP port
- "8080:8080" # The Web UI (enabled by --api)
volumes:
- /var/run/docker.sock:/var/run/docker.sock
search-microservice:
container_name: ${CONTAINER_NAME_SEARCH}
restart: always
build: ./backend/search-service
links:
- ${DB_HOST}
depends_on:
- ${DB_HOST}
ports:
- "8002:3000"
labels:
- "traefik.port=80"
- "traefik.frontend.rule=Host:search-microservice.localhost"
volumes:
node-ts-app-volume:
external: true

node-app 和 search-microservice 都公开了端口 3000。

为什么我不能调用 http://search-microservice.localhost:8002从 Node 应用程序?不过从浏览器调用它是可行的。

最佳答案

因为 node-app 是一个容器,要访问其他容器,它必须使用服务名称和内部端口

在您的例子中,它是 search-microservice:3000

要访问主机 PC 和暴露的端口,您必须为所有服务和外部端口使用 host.docker.internal 名称。

关于node.js - docker-compose 和 traefik 微服务之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54763936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com