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