docker-compose:服务到服务的通讯无法按预期进行

时间:2019-06-28 17:02:02

标签: docker docker-compose

我制作了api,它从多个来源收集数据(在此示例中,它们确实在88和99位置上发布了请求),然后通过几个端点提供了这些数据的汇总。然后,我有两个应用程序从此api获取数据并进行可视化。 我已经指出了这个问题:尽管docker-compose docunentation(许多教程)都明确指出:

请务必注意HOST_PORT和CONTAINER_PORT之间的区别。在上面的示例中,对于db,HOST_PORT为8001,容器端口为5432(默认为postgres)。联网的服务到服务通信使用CONTAINER_PORT。定义HOST_PORT时,也可以在群集外部访问该服务。

...但是我的2个应用仍然无法访问api。

如果我在两个应用程序上都公开了我的api端口,则会收到错误消息,指出已经提供了该端口(按照文档的预期),但是我不明白的是为什么这些应用程序在不公开端口的情况下不能调用api(不是)它是服务到服务的通信?)。 我还使用nginx找到了多个相同的解决方案,但是因为这是我自己的自由人项目,所以我想学习错误之处并以正确的方式进行操作,因为显然我对文档有误解。我现在的目标只是让我的两个应用程序能够进行api调用。目前仅在单个主机上,请任何人提供解决方案或提示和想法的帮助吗?

我当前的docker-compose

services:
  host:
    image: "api_host"
    ports:
      - 88:88
      - 99:99
  app1:
    image: "app"
    ports:
      - 7777:7777
  app2:
    image: "app"
    ports:
      - 8888:8888```

1 个答案:

答案 0 :(得分:0)

问题在于,尽管您的撰写文件显示了3个容器,但这些容器未联网在一起。要解决此问题,请在撰写文件中为其定义一个网络。这将确保您的主机和API可以在指定端口上相互通信。还将允许您根据服务名称(即在配置文件中)调用API和主机。

使用网络撰写示例:

services:
  host:
    image: "api_host"
    ports:
      - 88:88
      - 99:99
    networks:
      - myapinetwork
  app1:
    image: "app"
    ports:
      - 7777:7777
    networks:
      - myapinetwork
  app2:
    image: "app"
    ports:
      - 8888:8888```

networks:
    myapinetwork:
相关问题