docker - 用 sh 文件中的值替换字符串占位符
问题描述
我不得不说,在 Windows 环境 /Powershell 中我会立即完成,但由于我必须在 docker Linux 映像中执行这个 shell 脚本,所以我需要你的帮助。
我有一个 node.js env 文件,我在其中存储了我的环境变量,因此 nodejs 应用程序可以稍后使用它们。我设置了一些占位符,我需要用我从 docker 获得的事件 args 参数替换它们run command
。
.env 文件的内容是
NodePort={NodePort}
DBServer={DBServer}
DBDatabaseName={DBDatabaseName}
DBUser={DBUser}
DBPassword={DBPassword}
DBEncrypt= {DBEncrypt}
RFIDNodeUrlRoot={RFIDNodeUrlRoot}
RFIDStartMethod={RFIDStartMethod}
RFIDStopMethod={RFIDStopMethod}
RFIDGetTagsMethod={RFIDGetTagsMethod}
我不知道打开文件、替换环境变量中的值然后保存它的最佳方法是什么。
任何人都可以帮助我吗?谢谢
解决方案
您可以使用包envsubst
的 which ist 部分gettext-base
看:
.env.temp
NodePort=${NodePort} # notice the `$` before `{}`
DBServer=${DBServer}
..
假设您正在设置环境变量
docker run -e "NodePort=8080" -e "DBServer=foo"
在该容器内,您将不得不使用一些entrypoint.sh
脚本来运行:
envsubst \$NodePort,$\DBServer,.. < .env.temp > .env
然后启动您的应用程序传递.env
给您的 nodejs 应用程序。
作为替代方案,您也可以使用sed
to edit .env
,这可能很难理解。
subst_env() {
eval val="\$$1" # expands environment variable to val
sed -i "s%\$$1%${val}%g" $2 # using % as sed-delimiter to avoid escaping slashes in urls
}
subst_env 'ENV_DOCKER_DOMAIN' .env
推荐阅读
- text - 确定 ANSI 终端转义码大小
- c++ - 没有用于调用 c++ 构造函数的匹配函数
- react-native - 如何在屏幕上显示之前将一些数据映射到从 API 获取的数据?
- python - sklearn.metrics.precision_recall_curve 中的估计概率(probas_pred)是多少?
- python - 如何在全局函数中创建列表?
- python - 将行附加到 CSV,将标题添加为一行
- node.js - 在单元测试中使用 aws-sdk-mock 问题对 S3 getObject 进行单元测试
- c# - 如何在 ViewModel 中实例化一个对象并在另一个 ViewModel 或用户控件中编辑它
- javascript - 如何将悬停效果仅应用于背景元素?
- c# - 将自定义集合转换为实现的接口