国企有没有必要建设网站,wordpress本地时间,目前国内家教做的好的网站,中国网建短信平台前言
根据项目需求#xff0c;在实现登出功能时#xff0c;需要根据测试环境和生产环境调用不同的登出URL。本文将介绍如何在Docker前端镜像中设置变量以及使用变量的方法。
解决办法
在生成前端容器的阶段#xff0c;可以使用同一个镜像#xff0c;根据不同的环境传入参…前言
根据项目需求在实现登出功能时需要根据测试环境和生产环境调用不同的登出URL。本文将介绍如何在Docker前端镜像中设置变量以及使用变量的方法。
解决办法
在生成前端容器的阶段可以使用同一个镜像根据不同的环境传入参数来创建不同的前端容器。下面将分享一个在容器执行阶段动态插入并使用变量的实例。
步骤
在根目录创建start.sh文件文件内容如下:
#!/usr/bin/env shcat /etc/nginx/nginx.conf
nginx -g daemon off;注: #!/usr/bin/env sh 并不是注释的意思而是选择编译语言的意思。建议使用sh因为bash可能不是每台服务器都安装的。 注 为什么要加nginx -g daemon off; 因为要让容器能持续运行必须要有前台进程这里将nginx转为前台进程。 在Dockerfile中复制start.sh将其从容器外复制到容器内:
...
COPY start.sh /app/start.sh在根目录创建nginx.conf.template文件首先从nginx.conf复制代码然后在文件的http - server下添加ENV_VARS占位符代码如下:
http {...server {.....location /env.json {default_type application/json;return 200 ${ENV_VARS};}}
}在项目的服务器端创建一个获取变量的方法代码如下
type Env {logoutUrl?: string;
};export async function getEnvironmentVariables() {return requestEnv(/env.json, { method: GET });
}在项目代码中添加使用变量的方法代码如下
const logout () {getEnvironmentVariables().then((data) {const logoutUrl data?.logoutUrl;if (logoutUrl) {...}}).catch((e) {...});};在正常构建镜像之后在生成容器时可以通过环境变量传参来替换原前端nginx.conf.template文件中的ENV_VARS字符串:
docker run -e ENV_VARS{logoutUrl: xxxxxx} --name test -p 81:8000 -itd swr.test:v0.0.31sh start.sh注如果替换的环境变量是JSON格式需要将变量值用单引号包含变量值内的属性值使用双引号。例如ENV_VARS{logoutUrl: xxxxxx} 后言
这个设计使得在前端独立容器化部署时能够通过环境变量解耦登出地址避免了一次又一次的构建镜像工作量。希望本文对您有所帮助如果有任何问题请在下方留言进行沟通。如果本文对您有一点帮助请给我一个点赞支持一下。
希望以上优化建议对您有所帮助如果您还有其他问题或需要进一步优化请随时告诉我。