周末我在docker 的 IRC上问了这个问题,但在我想通答案之前不得不离开:
如果我有许多在容器中运行的应用程序(让我们暂时假设它们都在相同的物理硬件上运行,但不一定是这种情况)并且我希望它们中的每一个都能够找到每个其他自动。
使用某种注册表(例如etcd或 DNS-SD/Bonjour),您可以宣布您的服务和任何相关细节,并让其他应用程序了解它们并相应地路由流量。
这里的问题是,虽然应用程序可以知道它在容器中服务于哪个主机名/端口,但这不一定是它可以访问的端口或地址。有两个信息需要连接:
- 可以访问服务的位置;从容器外部访问
- 服务做什么(版本号、服务类型);可从容器内部访问
您如何建议我通过容器屏障获取此信息?
- 我可以通过 TCP 向容器公开 docker,因此应用程序可以查询它的显示位置,但这似乎违反了关注点分离。
- 我可以在我的容器中打开一个文件/端口,在容器启动后主机系统会查询该文件/端口以准备发布,但这感觉有点像我要重新发明 WSDL。
关于我应该如何解决这个问题的任何想法或指导?