【问题标题】:Anyway to configure server URL while running a docker image? (instead of hard coding in app)无论如何在运行 docker 映像时配置服务器 URL? (而不是应用程序中的硬编码)
【发布时间】:2019-09-23 07:51:32
【问题描述】:

我有一个使用 Angular 7 构建的 Web 应用程序,我需要进行 API 调用以获取我在应用程序中显示的一些数据。

API 端点是 node.js 中的快速服务器,它有一些配置可以从 Web 应用的 URL 启用 CORS

我已经为 Web 应用程序和中间件服务创建了单独的 docker 映像,并且我计划将它们部署在同一台服务器上(具有一些 IP 的云 VM 上的 Linux 机器 - a.b.c.d)

由于我知道此 VM 的 IP,我可以在 Web 应用程序(Angular 服务)中将 API URL 硬编码为 a.b.c.d/api/foo,并将中间件中的 Web 应用程序的 URL 列入白名单为 a.b.c.d:3000

但在某些情况下,VM 的 IP 地址可能会在未来发生变化,我们还将在云中自动创建 VM 并使用 ansible 脚本进行部署。在这种情况下,有什么方法可以在 Web 应用程序和中间件中使用某种占位符并在服务器上运行 docker 映像时配置 URL?或者事实上我可能在应用程序中使用的任何 URL(比如 - 数据库 URL 等)

【问题讨论】:

  • 您标记了docker - 您打算作为 docker 容器发布吗?然后查看docker network ...。您可以创建一个本地网络并使用它来连接两个容器,独立于可能更改的 IP 或 DNS 条目。
  • 大多数云环境都可以为您的虚拟机分配 dns 名称,您可以使用这些名称来代替 IP 地址。你是使用 Ansible 还是其他自动化工具并不重要。如果您 (a) 告诉我们您正在使用 哪个 云环境,以及 (b) 您到目前为止是如何尝试解决这个问题的,我们可能会给您一个更好的答案。
  • 它是一个用于学术研究目的的云环境。

标签: node.js angular docker express ansible


【解决方案1】:

我们已经使用了这种方法,所以它肯定会起作用。 您可以将网址保存在environment.ts 并在所需的页面上调用它

export const environment = {
  production: false,
  apiUrl : 'http://a.b.c.d:3000'
};

服务页面包含服务的 url

  export class CServices {
      private url = environment.apiUrl;
constructor(){}

  checkfunction() {
    return this.http.post(this.url + '/api/', JSON.stringify(payload));
  }
    }

【讨论】:

  • 如果我们知道 IP 是恒定的并且事先知道,这将起作用。但是如果我们必须关闭虚拟机并在重新创建它时分配一个不同的 IP 怎么办。我们必须再次更新应用程序的代码以反映 IP 更改。
  • 好的。抱歉,我当时没有收到您的问题,如果我发现了什么,我会发布
猜你喜欢
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
相关资源
最近更新 更多