【发布时间】:2018-01-15 01:23:54
【问题描述】:
我们正在对我们的微服务应用进行 docker 化,但我遇到了一些发现问题。
应用配置如下:
当服务以“非本地”模式启动时,它使用 Consul 作为其发现注册表。 当服务以“本地”模式启动时,它会自动为每个服务绑定一个地址(例如,tcp://localhost:61001、tcp://localhost:61002 等。硬编码地址)
在对应用程序进行 docker 化后(目前仅适用于本地模式),每个服务都是一个容器(使用 docker-compose 编排的 Docker 映像。如果重要的话,还可以使用 docker-machine) 但是一个服务不能与另一个服务交互,因为它们不在同一台机器上,而且 tcp://localhost:61001 显然不起作用。
使用 docker-compose 和 links 并将 localhost 指定为别名 (service:localhost) 不起作用。有没有办法让 2 个容器“共享”同一个本地主机?
如果不是,解决此问题的最佳方法是什么? 我考虑过为每个服务使用特定的主机名,然后在 docker-compose 的链接部分指定主机名。 (但我怀疑这是优雅的解决方案) 或者也许使用 dockerized 版本的 Consul 并与之集成?
这篇文章:How to share localhost between two different Docker containers? 提供了一些关于为什么 localhost 不应该被搞乱的见解 - 但我仍然对这里的正确方法感到很困惑。
谢谢!
【问题讨论】:
-
绑定到 0.0.0.0 而不是 localhost,然后通过上述链接共享。您不需要手动指定主机名,默认情况下它是容器名称。
标签: docker docker-compose microservices consul docker-networking