容器中的Springboot应用连接Nacos,无法读取环境变量的尴尬问题
问题描述:本地测试连接nacos可以,但在k8s的pod中连接不到nacos,提示groupId为空。其中,bootstrap.yml文件为:spring:application:name: ms-scriptenginecloud:config:enabled: falsenacos:config:enabled: trueserver-addr: nacos.public.svc..
·
问题描述:
本地测试连接nacos可以,但在k8s的pod中连接不到nacos,提示groupId为空。
其中,bootstrap.yml文件为:
spring:
application:
name: ms-scriptengine
cloud:
config:
enabled: false
nacos:
config:
enabled: true
server-addr: nacos.public.svc.cluster.local:8848
namespace: ${nacos.namespace}
group: ${nacos.group}
file-extension: yaml
1. 去pod中查环境变量,发现nacos.namespace 和 nacos.group 都是存在的,说明deployment中配置的环境变量在容器启动后是注入成功的;
2. 怀疑是jar包先启动,后注入的环境变量,于是修改deployment相关配置,使jar包延时1小时启动,去环境变量中查看,nacos.namespace 和 nacos.group 依然是存在的,该假设被推翻;
最终发现,Dockerfile中的启动jar包命令为:
CMD ["sh","/home/hollicube/startup.sh"] 其中startup.sh中是java -jar xxx.jar命令,用来启动应用。
修改为: CMD ["bash","/home/hollicube/startup.sh"] ,成功。
原因:sh已被bash所取代,sh启动应用,应用无法读取带点的环境变量,如上文中,环境变量名为nacos.namespace,带点,bash启动应用就可以读取环境变量。
3. 注意:nacos中配置的文件后缀,如果之前在configserver中是 .yml后缀,到nacos仍然用 .yml后缀也无法读取,需要改为 .yaml。
更多推荐
已为社区贡献2条内容
所有评论(0)