我使用一个简单的Nginx docker容器来提供一些静态文件。我使用Kubernetes将此容器部署到不同的环境(例如登台,生产等),Kubernetes在容器上设置环境变量(假设为FOO_COUNT
)。
让Nginx在每个响应中将FOO_COUNT
的值作为标头传递的最简单方法是什么,而不必为每个环境构建不同的容器?
答案 0 :(得分:2)
开箱即用,nginx不支持大多数配置块中的环境变量。但是,您可以使用envsubst
as explained in the official nginx Docker image。
只需创建一个可在您名为的nginx容器中使用的配置模板,例如: /etc/nginx/conf.d/mysite.template
。
它包含你的nginx配置,例如:
location / {
add_header X-Foo-Header "${FOO_COUNT}";
}
然后使用
覆盖Dockerfile命令/bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
如果您使用的是docker-compose.yml
文件,请使用command。
Kubernetes provides a similar way to override the default command in the image。
答案 1 :(得分:0)
这在 nginx 1.19+ 中成为可能。此功能现已内置。
您需要做的就是将您的 default.conf.template
文件(它查找 *.template 后缀)添加到 /etc/nginx/templates
,启动脚本将在其上运行 envsubst
,并输出到 { {1}}。
在 docs 阅读更多内容,请在此处查看示例 https://devopsian.net/notes/docker-nginx-template-env-vars/