当我将我的jhipster应用程序部署到openshift时,它失败并
_start
因为entrypoint.sh包含
,这并不令人惊讶。main
Error: Unable to access jarfile //app.war
不包含#!/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" "$@"
值,因为openshift使用随机用户ID,因此找不到该jar。
我用${HOME}
生成了配置文件,但Dockerfile不适合这种情况。
有什么想法吗?
答案 0 :(得分:0)
我会提供2种选择。
选项1:
在部署securityContext.runAsUser: <the UID of the jhipster user>
通常,这与Security Context Constraints (SCCs)有关。
要发现jhipster用户的UID,请在容器中放入一个shell并执行
id jhipster
如果由于Java应用程序无法启动而无法打开容器而无法获得外壳,请将其添加到容器的部署配置中:
command: ["sh"]
stdin: true
用bash或图像可能具有的任何其他外壳代替sh。然后,您可以从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
文件权限,此选项可能仍然会失败。