
有个 Java 项目,代码里面有个配置文件写死了 nacos 配置中心的地址以及一些其它参数,如何构建镜像才能实现三个不同的环境使用?或者有没有更灵活的办法呢?
比如三个环境的 nacos 地址
Uat 环境 nacos 地址 uat.nacos.com
Stag 环境 nacos 地址 stag.nacos.com
Prod 环境 nacos 地址 prod.nacos.com
1 CEBBCAT 2021 年 7 月 17 日 - 在初始化时根据环境切换配置内容 - 按照文件加载配置 |
2 defunct9 2021 年 7 月 17 日 via iPhone 有,启动 pod 的时候侵入修改 |
3 creanme 2021 年 7 月 17 日 蹭主题,顺便问问前端如何打包一次,能在两个环境中使用。代码中有调用其它系统接口,测试环境和生产环境接口不同。之前要么在本地或者 pipeline 中打包两次,分别对应测试环境和生产环境,或者在代码里面根据当前域名来判断是否是生产环境,不过都不太好的样子。 |
4 Acoffice 2021 年 7 月 17 日 via Android 通过不同变量来加载不同地址。 |
5 ruiyi1994 2021 年 7 月 17 日 通过环境变量的改变来加载配置, 比如设置一个 RUN_ENV=production | stage | testing | dev |
6 ik 2021 年 7 月 17 日 via iPhone 写成同样的地址呢, 不同环境配置不同解析? |
7 xuanbg 2021 年 7 月 17 日 JAVA_OPTIOnS="-Dspring.profiles.active=prod" JAVA_OPTIOnS="-Dspring.profiles.active=stag" |
8 clickhouse 2021 年 7 月 17 日 常见的就是楼上,指定 spring 的 profiles,配置都放在 jar 包里面。要不然就是启动 jar 的时候,动态传入需要的地址。 |
9 Jooooooooo 2021 年 7 月 17 日 启动的时候有个 pre 脚本 判定当前环境, 然后对应的替换配置文件中的内容 |
10 zhzy0077 2021 年 7 月 17 日 所有环境相关的配置,比如数据库连接,配置中心啥的,都应该是容器 /代码无关的,一般是通过环境变量拿进去。 12 factor app 可以看看: III. Config Store config in the environment |
11 BBCCBB 2021 年 7 月 17 日 通过启动变量.. 或者代码里写好, 根据启动参数里不同的 env 来使用不同的地址.. |
12 thet 2021 年 7 月 17 日 代码里面通过环境变量取值,镜像构建就不用管这些了,启动镜像的时候注入环境变量 |
13 winglight2016 2021 年 7 月 18 日 镜像是在说 docker image 吗?不是支持 env 配置吗?这个跟 image 无关,在 run 的时候加-env 就行了 |
14 lff0305 2021 年 7 月 18 日 via Android docker/kubernetes 都可以在部署的时候指定一个 file 覆盖镜像中的的 file,docker 通过-v , kubernetes 通过 configmap/volume |
15 tyit OP @xuanbg 这个可以,也就是 resource 下面,放三个文件,比如 uat stag prod,构建镜像,然后 deployment 启动的时候,加一个 Java_opts 这样传过去 docker 启动命令。应该可以实现了。 |
18 zzl22100048 2021 年 7 月 19 日 不知道用的是不是 SpringBoot,SpringBoot application 配置支持环境变量 Java 打包镜像用 jib 比较适合, |
19 tms 2021 年 7 月 21 日 靠运行时的环境变量来区分 |