容器内的jdk版本能换吗?启动参数支持加入skywalking-agent参数吗?

程序构建的时候选的是OpenJDK版本 默认选1.8版本

构建成功后进容器查看发现 OpenJDK版本为1.7.0_131

image

导致skywalking 代理端不能执行。平台的启动参数支持加入skywalking-agent参数吗?

java启动参数如下
java -javaagent:/usr/local/skywalking-agent.jar=agent.service_name=elib-gateway $JAVA_OPTS -jar elib-gateway/target/elib-gateway.jar

Rainbond版本:v5.1.9-release-32cc2ba-2019-12-13-09

抄送: @barnett

直接在微服务实例容器里面执行报java版本太低。该如何解决呀。

1 Like

这里的确容易被误导,为何选择了 openjdk1.8,但是进入环境执行 java -version 却显示了版本为1.7。
实际上,Rainbond的java源码构建,是将java运行环境和编译好的二进制包统一打包,然后丢到一个名为 runner 的容器中运行的,然而 runner 内部会有一个自己默认的java环境,即你所看到的 1.7 版本。
而真正使用的java二进制命令,实际位于容器实例的 /app/.jdk/bin/java 路径下。

所以如果希望在容器环境内启动jar包来进行调试,正确的姿势应该是这样的:

/app/.jdk/bin/java -jar *.jar

至于对 skywalking-agent 参数的支持,我先简单的了解了下这是个啥 :sweat_smile:,然后有了以下建议:

  • Rainbond原生没有在源码构建里支持 skywalking 的 agent。
  • 可以通过挂载持久化目录的方式,挂个目录出来,比如 /agent
  • 获取 /agent 目录在宿主机的挂载地址,参考官方文档: 存储挂载路径查看方式
  • 把你的 skywalking-agent.jar 拷贝进去
  • 启动时指定 -javaagent:/agent/skywalking-agent.jar
1 Like

按上述方法已经解决。有个坑就是改了启动参数后要重新构建微服务。配置才能生效。切记!