我正在为部署到多个环境的应用程序构建 docker 映像。对于其中一些环境,上下文根需要不同。
到目前为止,我使用 payara/server-full 作为基本映像,但我想切换到轻量级 payara/micro 映像。
在前者中,我能够使用以下方法设置上下文根:
${PAYARA_PATH}/generate_deploy_commands.sh --contextroot "${CONTEXT_ROOT}"
这意味着我能够在使用环境变量启动 docker 容器时动态配置上下文根。
我未能为 payara 微型部署找到类似的选项。作为后备,我尝试创建一个玻璃鱼网.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",但这不允许任何"斜杠"/嵌套路径。或者有没有办法做到这一点?
我的想法用完了,在类似的问题和错误中找不到任何解决方案。感谢您的帮助。
我知道有点晚了,但根据这一点,你可以在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
的上下文根,并将其放在根中。
好的,所以由于我似乎没有找到实现此目的的内置方法,因此我基本上复制了服务器完整 docker 映像的行为并且它起作用了。
详细地:
- 将generate_deploy_commands.sh脚本复制到我的构建文件夹
- 在生成期间将脚本添加到容器并使其可执行
- 添加了环境变量
ENV POSTBOOT_COMMANDS postboot.txt
和ENV CONTEXT_ROOT api
- 作为docker RUN的一部分运行
${PAYARA_PATH}/generate_deploy_commands.sh --contextroot "${CONTEXT_ROOT}"
,但在实际启动payara之前 - 使用 --postbootcommandfile $POSTBOOT_COMMANDS 启动 payara。
- 现在我们可以在运行 docker 容器时使用 -e CONTEXT_ROOT=API/v1 设置上下文根
我希望这有助于其他人寻找解决方案。
你是对的,最近的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。
现在可以通过使用 DEPLOY_PROPS --contextroot=/api 来实现。
请参阅此处使用 env 变量的位置。