有个 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 日
靠运行时的环境变量来区分
|