最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

微服务与docker

运维笔记admin10浏览0评论

微服务与docker

微服务与docker

我有一个基于微服务的节点应用程序。我使用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。

为什么我不能从节点应用程序调用:8002?尽管从浏览器调用它。

回答如下:

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

在你的情况下,它是search-microservice:3000

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

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论