如何获取api网关地址,以便从docker中的angular容器调用它

我有一个泊坞窗撰写文件,其中有几个容器之间有一个API网关和另一个与angularjs应用程序(这个堆栈的网站)。 api网关关心的是在构成文件中调用几个容器的正确apis。 但我需要从网站(angular容器)调用API网关,我想知道什么是最好的做法,以获得的API网关容器的地址,以调用它从angular容器(或从浏览器无论如何.. )。 目前我在当地工作,所以我指定localhost:PortOfApiGateway / apis / …

和一切工作正常,但显然,如果尝试从另一个主机连接它不工作…

任何build议?

根据您的环境,我看到几个可能的解决scheme。

1.你可以在Angular中有一个configuration文件

例如,Angular Cli提供了两个文件:environment.ts和environment.prod.ts

该文件的内容可以是:

export const environment = { production: false, apiBaseUrl: 'http://localhost:3000' }; 

和生产的等价物可以是真正的DNSurl

这是由Angular CLI提供的,但不需要CLI也可以这样做。 这里的想法是在编译时select文件。

2.始终使用相同的服务器

您可以假设主机名将与您从以下位置获取Angular应用程序的主机名相同:

 import { Location } from '@angular/common'; // Get the hostname this.hostname = location.host; if (this.hostname.indexOf(':') > 0) { this.hostname = this.hostname.substr(0, this.hostname.indexOf(':')); } // Add a port or a subdomain to get the API url: this.apiUrl = 'http://' + this.hostname + ':8080'; 

variables组成?

正如你在之前的评论中所说的,这些调用是从浏览器中完成的,所以在Docker之外。 我没有看到一个简单的方法把这个信息放在撰写文件中。 这就是说,我会有兴趣了解一下。

我希望它有帮助。

在您的docker-compose文件中,您可以使您的容器join现有的networking,该networking可以是默认的networking。 所以,你需要做的就是确保你的容器join你的angularjs容器已经在的networking。 然后,您可以简单地通过您在docker-compose文件中给出的名称来引用您的API容器(例如,如果您将其命名为api ,例如, ping api将起作用)。 请参阅撰写中的联网 。