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