如何在Payara Micro中动态设置上下文根?

时间:2018-06-29 13:21:09

标签: docker java-ee glassfish payara-micro

我正在为部署到多个环境的应用程序构建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”,但这不允许任何“斜杠” /嵌套路径。还是有办法做到这一点?

我的想法不多了,没有找到类似问题和错误的解决方案。感谢您的帮助。

3 个答案:

答案 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映像的行为,并且它起作用了。

详细信息:

  1. generate_deploy_commands.sh脚本复制到我的构建文件夹中
  2. 在构建过程中将脚本添加到容器中并使其可执行
  3. 添加了环境变量ENV POSTBOOT_COMMANDS postboot.txtENV CONTEXT_ROOT api
  4. ${PAYARA_PATH}/generate_deploy_commands.sh --contextroot "${CONTEXT_ROOT}"作为docker RUN的一部分运行,但在实际启动payara之前
  5. 使用--postbootcommandfile $ POSTBOOT_COMMANDS启动payara
  6. 现在我们可以在运行Docker容器时使用-e CONTEXT_ROOT = api / v1设置上下文根

我希望这可以帮助其他人寻找解决方案。

答案 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