【问题标题】:How to call one microservice from another microservice using docker images如何使用 docker 镜像从另一个微服务调用一个微服务
【发布时间】:2018-12-27 05:33:43
【问题描述】:

我有两个SpringBoot 微服务M1(port 2002) 和M2(port 2004)

如果我使用eclipse 运行M1M2(作为Java 项目或SpringBoot 项目运行),则它们通信成功。

但是,我想使用Docker container 与他们交流。

所以我使用以下命令为MicroservicesM1M2)构建图像:

docker build -f Dockerfile -t image_name .

并使用以下命令运行图像:

docker run -p 2004:2004 image_name

注意:我从 docker 暴露了与上面定义的相同的端口

但是 M1 和 M2 无法通信。 我正在使用RestTemplate

RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Boolean> isUp = restTemplate.getForEntity("http://localhost:2002/apis/test",Boolean.class);

我遇到了异常:

I/O error on GET request for \"http://localhost:2002/apis/test\": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)

但是,如果我使用我的机器的 IP 调用其他微服务,它会成功通信

ResponseEntity<Boolean> isUp = restTemplate.getForEntity("http://XX.XX.XX.XXX:2002/apis/test",Boolean.class);

谁能告诉我是在写(使用 IP 地址)还是有另一种好方法可以使用 Docker 从另一个微服务调用一个微服务?

【问题讨论】:

  • 您是否尝试过使用--net=host(docker run 的参数)?这应该可以解决 localhost 引用容器的内部 ip 而不是机器 ip 的问题。
  • @Ben 不,您能否将其添加为答案。我用什么替换host
  • 因为它更像是一个建议而不是一个直接的答案,所以在这里评论就可以了。你也确定这没有帮助?因为 localhost 在那一刻应该 100% 引用主机。参考this问题,接受的答案非常详细地解释了事情。
  • 尽管 Ben 的回答可能会奏效,但这可能不是最好的做法。你应该先阅读文档docs.docker.com/network

标签: java rest docker spring-boot microservices


【解决方案1】:

或者,您也可以通过--link 将两个容器链接在一起。假设您希望 container1 作为 container2 的客户端,您可以使用以下方法:

sudo docker run --link container2 --name=container1 -d image_name

【讨论】:

    【解决方案2】:

    尝试与其他容器通信将无法使用 localhost

    您应该创建一个自定义桥接网络,这将允许您按名称引用容器。如果您只是在内部交谈,则无需发布端口。

    # create network
    docker network create -d bridge mynet
    # container 1
    docker container run --network mynet --name container1 -d image_name
    # container 2
    docker container run --network mynet --name container2 -d some_other_image_name
    

    代码 sn -p 中的 IP 然后可以替换为另一个容器的名称

    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<Boolean> isUp = restTemplate.getForEntity("http://container2:2002/apis/test",Boolean.class)
    

    【讨论】:

      猜你喜欢
      • 2018-03-04
      • 1970-01-01
      • 2020-04-27
      • 1970-01-01
      • 2020-07-06
      • 2020-03-18
      • 2021-03-17
      • 2021-05-24
      • 2020-05-31
      相关资源
      最近更新 更多