使用consuldynamic地将IP和端口导出到另一个Docker容器

目标:从phpapp容器提供的web页面对http:// $ IP:$ PORT / api / container.json进行XHR调用, 而不用microservice api容器的IP和端口硬编码环境variables

http:// CONSULHOST:8500 / v1 / catalog / service / api将为我的API微服务公开configuration。

例:

[{"Node":"node", "Address":"123.1.2.3", "ServiceID":"163b5be3-5450-4cac-8416-c1630723bc42-n1:microlith_micro-hipchat_1:443", "ServiceName":"hipchat", "ServiceTags":["primary"], "ServiceAddress":"123.234.234.234", "ServicePort":32772 }] 

我正在寻找从该API端点上面列出的ServiceAddressServicePort端口,通过在phpapp Docker容器中dynamic调用API而不用硬编码信息。 然后,我可以在前端 Web浏览器中将此信息用作对http:// IP_OF_APP_CONTAINER的PUBLIC调用:PUBLIC_PORT / api / container.json

我已经安装了注册器的 领事 ,都在Docker Swarm中工作。

  • 我不想为我的微服务configuration硬编码。它必须使用Consul或环境dynamic创build。
  • 我不想对Consul IP进行编码。 它可以以某种方式传递,但我必须能够通过bash构build脚本来完成。
  • phpapp容器被链接到api容器,但是这似乎没有暴露前端端口,只有IP。

我做了一个我的用例图:

 docker-compose -> swarm -> phpapp container api container consul container registrator container 

码头群图

将使XHR调用的JavaScript将客户端,从我的PHP容器服务。 phpapp和api容器都在consul中显示,我在Consul API中看到它们,但是我想知道如何在phpapp容器上dynamic地将这个信息映射到一个configuration文件中,这样我就可以通过web进行XHR调用客户端为phpapp容器。