【问题标题】:Generic Docker image with multiple containers passing docker-compose variables具有多个传递 docker-compose 变量的容器的通用 Docker 映像
【发布时间】:2021-10-26 12:47:32
【问题描述】:

我目前正在构建一个 Angular 应用程序,它将被制作成一个 docker 图像。制作完这张图片,应该可以多人使用了。

问题是我无法将变量从 docker-compose 传递到 Angular 应用程序。

version: "3.6"

services:
  dashboard:
    image: imagename
    build:
      context: .
    ports: ["4200:8080"]
    volumes: ["./dev/config.json:/usr/share/nginx/html/dashboard/assets/config/conf.json"]
    environment:
      - KEY=EnvToBePassed

【问题讨论】:

  • 你想设置什么样的变量?如何从代码中访问它?你怎么知道它没有被传递?
  • 我正在尝试将环境变量从 docker-compose 发送到容器中。就像 apiUrl。我正在尝试用 envsubst 来做,但它现在不起作用。
  • 请编辑问题以包含这些详细信息。例如,您如何以及在哪里拨打envsubst,当您说“它不起作用”时,您会得到什么结果?

标签: angular docker docker-compose containers environment


【解决方案1】:

创建资产/env.js

(function(window) {
  window["env"] = window["env"] || {};

  // Environment variables
  window["env"]["apiUrl"] = "../assets/lorem.json";
  window["env"]["CompanyName"] = "Company name";
})(this);

创建资产/env.template.js

(function(window) {
  window["env"] = window["env"] || {};

  // Environment variables
  window["env"]["apiUrl"] = "../assets/lorem.json";
  window["env"]["CompanyName"] = "Company name";
})(this);

在 Dockerfile 中调用它

CMD ["/bin/sh",  "-c",  "envsubst < /usr/share/nginx/html/assets/env.template.js > /usr/share/nginx/html/assets/env.js && exec nginx -g 'daemon off;'"]

环境.ts

export const environment = {
  production: false,
  apiUrl: "../assets/lorem.json",
  CompanyName: "Company name"
};

环境.prod.ts

export const environment = {
  production: false,
// @ts-ignore
  apiUrl: window["env"]["apiUrl"] || "../assets/lorem.json",
// @ts-ignore
  CompanyName: window["env"]["CompanyName"] || "Company name"
};

从 index.html 调用它

<script src="./assets/env.js"></script>

【讨论】:

    猜你喜欢
    • 2020-02-23
    • 1970-01-01
    • 2018-12-18
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2019-01-07
    相关资源
    最近更新 更多