Docker合成链接的微服务不可发现

当使用docker compose时,我不能让两个服务相互通信。这个想法是让Node.JS服务与Java/Spring服务对话。

我尝试过使用“链接”,将它们放入相同的“网络”中,然后向http://service_name:port发送请求,然后它返回ERR_NAME_NOT_RESOLVED。

在Node.JS服务中,我尝试使用Axios和http模块,两者都不起作用(ERR_NAME_NOT_RESOLVED)。我也尝试过'localhost',它也不起作用(ERR_CONNECTION_REFUSED)。Spring服务实际上只是一个公开的REST端点(我知道它是工作的,因为我可以直接访问它)。

我也尝试过通过环境变量传递对服务的引用,例如(在docker-compose.yml中)。

environment:
  - SERVICE_HOST=serviceB

调用下面的函数时,Node.JS项目内部的环境变量未定义

process.env.SERVICE_HOST

我正在使用Windows和Docker工具箱,但也在Ubuntu VM中尝试过相同的项目。

  serviceA:
    build: ./serviceA/
    ports: 
      - "8080:8080"
    networks:
      - my_network
  serviceB:
    build: ./serviceB/
    ports:
      - "9003:9003"
    networks:
      - my_network

networks:
  my_network:
    driver: bridge
axios.get("http://serviceB:9003/test")
  .then(function(res){
    console.log(res);
  })

我期望Node.JS服务中的console.log语句能够响应ServiceB的rest调用的结果,而不是错误消息。

我刚开始使用docker-compose,所以我希望我在这里遗漏了一些明显的东西,但我在网上找不到任何解决我的问题的东西,也没有在类似的问题中找到解决问题的方法。

编辑添加的整个yaml文件和错误,以便更好地理解。

version: '3'
services:

  # Consul
  consul:
    container_name: consul
    image: consul:latest
    ports:
      - "8500:8500"
      - "8300:8300"
    hostname: consul
    networks:
      - front_end
      - back_end

  # Actor Service   
  actor_service:
    build: ./actor_service/
    ports: 
      - "9001:8080"
    depends_on:
      - actor_service_db
      - consul
    networks:
      - back_end

  actor_service_db:
    image: postgres:9.4.5
    depends_on:
      - consul
    networks:
      - back_end
    environment:
      - POSTGRES_DB=actor
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - CONSUL_HTTP_ADDR=https://consul:8500

  # Movie Service   
  movie_service:
    build: ./movie_service/
    ports: 
      - "9002:8080"
    depends_on:
      - movie_service_db
      - consul
    networks:
      - back_end

  movie_service_db:
    image: postgres:9.4.5
    depends_on:
      - consul
    networks:
      - front_end
    environment:
      - POSTGRES_DB=movie
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - CONSUL_HTTP_ADDR=https://consul:8500

  # Movie Aggregate Service
  movie_aggregate_service:
    container_name: movie_aggregate_service
    build: 
      context: ./movie_aggregate_service/
    ports: 
      - "9003:8080"
    depends_on:
      - consul
      - movie_service
      - actor_service
    networks:
      - front_end
      - back_end
    hostname: movie_aggregate_service

  # Frontend
  front_end:
    build: ./front_end/
    ports: 
      - "8080:8080"
    networks:
      - front_end
    environment:
      - "CONSUL_HOST=consul"
    links:
      - consul
      - movie_aggregate_service

networks:
  front_end:
    driver: bridge
  back_end:
    driver: bridge

Browser Console errors and output

转载请注明出处:http://www.66758680.com/article/20230526/1270178.html