当我将我的 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}
不包含 expeced/home/jhipster
值,因为 openshift 使用随机用户 ID,因此找不到 jar。
我用jhipster openshift
生成了配置,但 Dockerfile 不适合这种情况。
有什么想法吗?
我会提供 2 个选项。
选项 #1:在部署securityContext.runAsUser: <the UID of the jhipster user>
中设置
通常,这与安全上下文约束 (SCC( 有关。
要发现 jhipster 用户的 UID,请在容器内获取一个 shell 并执行
id jhipster
如果由于 Java 应用程序未启动而导致容器无法启动而无法获取 shell,请将以下内容添加到容器的部署配置中:
command: ["sh"]
stdin: true
将 sh 替换为 bash 或图像可能具有的任何其他外壳。然后,您可以从 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
文件权限,此选项可能仍会失败。