我正在为部署到多个环境的应用程序构建docker映像。对于其中某些环境,上下文根必须有所不同。
直到现在,我都使用payara/server-full作为基本图像,但是我想切换到轻量级的payara/micro图像。
在以前的版本中,我可以使用以下命令设置上下文根:
${PAYARA_PATH}/generate_deploy_commands.sh --contextroot "${CONTEXT_ROOT}"
这意味着在使用环境变量启动Docker容器时,我能够动态配置上下文根。
我无法为payara micro部署找到类似的选择。作为后备,我尝试创建具有以下内容的glassfish-web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
<context-root>__CONTEXT_ROOT__</context-root>
</glassfish-web-app>
在容器启动过程中(在启动payara micro之前),我然后用环境变量(例如'api / v1')的值替换了__CONTEXT_ROOT__
并将其添加到var文件的WEB-INF目录中。
似乎payara micro不使用该配置文件的上下文根规范。仍基于“ .war”的文件名部署该应用程序。我可以根据环境变量重命名“ .war”,但这不允许任何“斜杠” /嵌套路径。还是有办法做到这一点?
我的想法不多了,没有找到类似问题和错误的解决方案。感谢您的帮助。
答案 0 :(得分:2)
我知道现在有点晚了,但是根据this,您可以在glassfish-web.xml
中进行“特殊”环境扩展,即。如果您将其放入其中:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN"
"http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
<context-root>${ENV=CONTEXT_ROOT}</context-root>
</glassfish-web-app>
这会扩展到所需的上下文根。我使用payara-micro 5.183进行了测试,但根据文档,从2017年5月中旬开始使用您应该会很好。
但是,如果您像我一样将战争称为ROOT.war
,就会遇到问题。我无法真正说明原因,但这会覆盖glassfish-web.xml
的上下文根,并将其放在根中。
答案 1 :(得分:1)
好的,所以因为我似乎没有找到实现此目标的内置方法,所以我基本上复制了服务器端完整的Docker映像的行为,并且它起作用了。
详细信息:
ENV POSTBOOT_COMMANDS postboot.txt
和ENV CONTEXT_ROOT api
${PAYARA_PATH}/generate_deploy_commands.sh --contextroot "${CONTEXT_ROOT}"
作为docker RUN的一部分运行,但在实际启动payara之前我希望这可以帮助其他人寻找解决方案。
答案 2 :(得分:0)
是的,最新的Payara Micro 5.182不支持任何指定contextRoot的选项。它始终来自WAR文件的名称。
使用Payara Micro 5.182将应用程序部署到自定义上下文根的唯一方法是在--postbootcommandfile
中使用asadmin deploy命令部署应用程序,该命令允许指定所有部署属性,包括上下文根。有关用法的说明,请参见https://docs.payara.fish/documentation/payara-micro/asadmin/pre-and-post-boot-scripts.html。