【问题标题】:Communication between two microservices by Docker hostname通过 Docker 主机名在两个微服务之间进行通信
【发布时间】:2018-09-07 03:39:42
【问题描述】:

现在如何运作:

微服务 X 使用静态 IP 向微服务 Y 发出 REST API 请求

http://{ip-address}:{port}/doSomething

问题:

问题是我不能长期保证静态ip。 我不想通过使用 docker 主机名来解决这个问题:

http://hostname:{port}/doSomething

我尝试通过在 docker-compose 中创建已使用的已定义网络来实现此目的:

    #part of docker-compose file
    streamapp:
      hostname: twitterstreamapp
      image: twitterstreamapp
      container_name: twitterstreamapp
      restart: always
      ports:
        - '8090:8080'
      build:
        context: ./TwitterStream
        dockerfile: Dockerfile

    storeapp:
      hostname: twitterstoreapp
      image: twitterstoreapp
      container_name: twitterstoreapp
      restart: always
      ports:
        - '8095:8080'
      build:
        context: ./TwitterStore
        dockerfile: Dockerfile
      depends_on:
        - 'mysql-db'
      networks:
        - backend

  volumes:
    MyDataVolume:

  networks:
    backend:
      driver: bridge

我可以从 Container X ping 到 Container Y。但不是 Curl。 我该如何解决这个问题,或者这不是实现我想要的最佳方式。

【问题讨论】:

    标签: docker docker-compose microservices


    【解决方案1】:

    解决方案非常简单,您可以使用服务名称来代替使用 IP 或主机名。

    在您的示例中,在streamapp 服务中,您可以使用http://storeapp:8080 访问另一个服务。

    同样,在storeapp 服务中,您可以通过http://streamapp:8080 访问另一个服务。

    请注意,您必须使用内部端口,而不是导出的端口。

    这不适用于您从其他机器(即互联网)访问服务时。在这种情况下,您必须使用http://{IP_OF_THE_MACHINE}:8090

    格式

    【讨论】:

    • 你是我的英雄!我没有意识到我需要使用内部端口。谢谢!
    • 我想在同一台机器上做这个?,几个节点,所以它可能......或者简单的方法就是做你的例子。
    最近更新 更多