openshift 上的 jhipster:无法访问 jarfile

jhipster on openshift: Unable to access jarfile

当我将我的 jhipster 应用程序部署到 openshift 时,它失败了

Error: Unable to access jarfile //app.war

这并不奇怪,因为 entrypoint.sh 包含

#!/bin/sh

echo "The application will start in ${JHIPSTER_SLEEP}s..." && sleep 
${JHIPSTER_SLEEP}
exec java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar 
"${HOME}/app.war" "$@"

${HOME} 不包含预期的 /home/jhipster 值,因为 openshift 使用随机用户 ID,因此找不到 jar。

我使用 jhipster openshift 生成了配置文件,但 Dockerfile 不适合此上下文。

有什么想法吗?

我会提供 2 个选项。


选项#1: 在部署中设置securityContext.runAsUser: <the UID of the jhipster user>

总的来说,这与Security Context Constraints (SCCs)有关。

要发现 jhipster 用户的 UID,在容器中获取 shell 并执行

id jhipster

如果由于 Java 应用程序未启动导致容器无法启动而无法获得 shell,请将其添加到容器的部署配置中:

command: ["sh"]
stdin: true

将 sh 替换为 bash 或图像可能具有的任何其他 shell。然后您可以从 OpenShift 控制台或使用 oc exec(请参阅 https://docs.openshift.com/container-platform/3.9/dev_guide/executing_remote_commands.html#basic-usage

放入容器内

选项 #2: 覆盖启动 entrypoint.sh 脚本。例如,在部署配置中添加如下内容:

command: ["java"]
args: [
  "${JAVA_OPTS}",
  "-Djava.security.egd=file:/dev/./urandom",
  "-jar",
  "/home/jhipster/app.war"
]

我假设 app.war 是正确的,而不是 app.jar

不过,基于 /home/jhipster/app.war 文件权限,此选项可能仍会失败。