首页 > 解决方案 > Docker 命令无法在运行时将参数传递给 appConfig.json 文件

问题描述

嗨,我是 docker 新手(版本 19.03.8),基本上我有一个 angularjs 项目(dummyPoject),其中包含具有以下路径的 appConfig.json 文件dummyPoject\src\assets\conf\appConfig.json。json 文件包含以下变量:

{
  "baseUrl": "MAPPED-URL"
}

基本上我想 用我在执行 docker 命令时发送的那个来覆盖MAPPED-URL属性。

根据在线文档,我发现它可以在运行 docker 命令时作为环境变量传递,请在下面找到:

docker run -e baseUrl=http://localhost:8081/dummyUrl/ -p 8000:8080 -d --name cms test:1.0

我期待 MAPPED-URL 将更改为 http://localhost:8081/dummyUrl/ 但事实并非如此。请问我在这里有什么遗漏吗?

标签: angularjsdocker

解决方案


通过添加-e baseUrl=http://localhost:8081/dummyUrl/docker run您已成功将环境变量添加到您的 docker 容器。但是这个值不会神奇地替换appConfig.json文件中的值。

您将需要某种脚本来从环境中提取 baseUrl 变量并替换脚本中的值。这可以使用 bash 脚本来完成,该脚本在容器启动时运行并"baseUrl": "MAPPED-URL"使用您添加的环境变量替换该行。

更新:

这个问题启发我创建了一个小的 Node.js 包命令行包,它应该有助于解决您的问题。该软件包称为replace-env

您可以添加replace-env到您的 package.json 依赖项。然后,您可以在 Dockerfile 构建过程中运行该命令,或者您可以通过自定义CMD指令让它在运行时修改文件。


推荐阅读