1

我正在为部署到多个环境的应用程序构建 docker 映像。对于其中一些环境,上下文根需要不同。

到目前为止,我使用payara/server-full作为基础镜像,但我想切换到轻量级的payara/micro镜像。

在前者中,我可以使用以下方法设置上下文根:

${PAYARA_PATH}/generate_deploy_commands.sh --contextroot "${CONTEXT_ROOT}" 

这意味着我能够在使用环境变量启动 docker 容器时动态配置上下文根。

我没有为 payara 微部署找到类似的选项。作为后备,我尝试使用以下内容创建 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 之前),我将其替换__CONTEXT_ROOT__为环境变量的值(例如 'api/v1')并将其添加到 var 文件的 WEB-INF 目录中。

似乎 payara micro 没有使用该配置文件的上下文根规范。该应用程序仍然基于“.war”的文件名进行部署。我可以根据环境变量重命名“.war”,但这不允许任何“斜杠”/嵌套路径。或者有没有办法做到这一点?

我已经没有想法了,也没有在类似的问题和错误中找到任何解决方案。谢谢你的帮助。

4

3 回答 3

2

我知道这有点晚了,但据此可以在glassfish-web.xmlie 中进行“特殊”环境扩展。如果你把它放进去:

<?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's context-root,并将其放在根目录中。

于 2019-01-14T12:30:05.823 回答
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 设置上下文根

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

于 2018-07-16T11:33:40.990 回答
0

你是对的,最近的 Payara Micro 5.182 不支持任何指定 contextRoot 的选项。它始终源自 WAR 文件的名称。

使用 Payara Micro 5.182 将应用程序部署到自定义上下文根的唯一方法是使用 asadmin deploy 命令在 a 中部署应用程序--postbootcommandfile,该命令允许指定所有部署属性,包括上下文根。有关使用文档,请参阅https://docs.payara.fish/documentation/payara-micro/asadmin/pre-and-post-boot-scripts.html

于 2018-07-04T11:23:02.727 回答