docker - 尝试将 env args 从 openshift 配置获取到 Dockerfile,然后使用 envsubst 进入 nginx 配置
问题描述
因此,我将一个 React 应用程序部署到 Openshift 中,它将调用一个单独的 API 服务,我需要根据登台环境 dev 或 prod 确定我的 nginx.conf 中的 proxy_pass。这似乎是一个足够常见的用例,但似乎极难实现。我正在为我的 nginx 服务器使用 nginxinc/nginx-unprivileged 而不是常规的 nginx 映像 - 我不知道这是否会导致任何问题。似乎在 nginx.conf 文件中使用支持 envsubst 的 nginx 1.19。
我想要做的是:
- 在我的 buildConfig.yml 和 prodBuildConfig.yml 中分别定义一个 proxy_url 环境变量
- 在我的 Dockerfile 中触发 envsubst 以替换我的 nginx.conf 中的变量以传递给 proxy_pass
代码看起来像这样
buildConfig.yml
...
spec:
resources: {}
strategy:
dockerStrategy:
env:
- name: "API_URL"
value: "http://devservice:8080"
dockerfilePath: Dockerfile
Dockerfile
...
CMD /bin/bash -c "envsubst '\$API_URL' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
最后是 nginx.conf
...
location /api {
proxy_pass ${API_URL};
}
但似乎没有任何效果。我已经尝试过一百万种 CMD bin/sh envsubst 命令的变体,例如
CMD /bin/sh -c envsubst \${API_URL} < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'
我试过改变引号,就像我在很多帖子上看到的那样,我尝试过使用 bin/sh 与 bin/bash,我尝试过将 conf 文件的名称更改为 nginx.conf.template或者只是 default.temp,我尝试将 nginx 模板复制到 etc/nginx/templates 文件夹中,该文件夹应该会自动运行 envsubst 并将其放入 /conf.d/ 中,但这不起作用。我基本上都试过了。我对 Openshift、Docker 和 Nginx 完全陌生,所以我真的不知道这个工作流程应该是什么样子,也不知道我是否过于复杂或只是走错了路。我错过了什么?请尽可能明确地解释您如何解释事物,因为我是这些技术的新手。
解决方案
推荐阅读
- r - 用添加到上一列的计算结果替换 NA 值
- tsql - t sql Dynamic Pivot 使用两列
- angular - Ionic Angular - ngFor 内容不显示但数组有成员
- reactjs - 在 React 中只运行一次函数?
- accessibility - 低视力用户的高对比度模式
- json - Ajax调用重新调整需要附加到选择框中的Json
- javascript - 滚动到图像地图的特定区域
- c# - WPF 绘制缩放填充的封闭多边形
- microsoft-graph-api - Microsoft 图表区分 Microsoft Teams 上的电子邮件和消息
- c# - ExecuteReader 需要一个打开且可用的连接。连接的当前状态是 Open