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

我没有足够的想法,也没有找到类似问题和错误的解决方案。谢谢你的帮助。

最佳答案

我知道已经有点晚了,但是根据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月中旬开始使用应该会很好。

但是,如果像我一样先调用war ROOT.war,就会遇到问题。我不能真正地说出原因,但这会覆盖glassfish-web.xml的context-root,并将其放在根目录中。

关于docker - 如何在Payara Micro中动态设置上下文根?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51102751/

10-12 23:47