回答Stackoverflow问题可以为我发现我最喜欢的开源工具的正式文档中的空白提供很好的反馈。 我在这里回答的问题之一是如何在docker容器中更改Payara Server主密码 。 显然,在标准服务器安装中,这很简单–只需使用asadmin change-master-password命令,然后在控制台中输入旧密码和新密码即可。 但是不在docker中,必须通过脚本自动进行配置。 这同样适用于所有基础架构即代码解决方案,例如Chef或Puppet。 因此,我不得不更深入地研究文档并进行一些实验。
从文件中指定密码
在脚本中使用密码的关键是在文件中提供密码。 每个asadmin命令都接受参数–passwordfile,以指示它从中读取所有必需的密码,从而避免以交互方式询问密码。 但是在此密码文件中查找如何定义密码有点棘手,因为它用于多种类型的密码。 适用于GlassFish v3的Oracle文档,该文档也适用于GlassFish v4和v5以及Payara v4和5,其中记录了4种类型的密码 。 可以在密码文件中使用带有AS_ADMIN_前缀的变量来指定每种密码。
- 带有前缀AS_ADMIN_PASSWORD的管理员密码,默认为空密码
- 前缀为AS_ADMIN_MASTERPASSWORD的主密码,默认为“ changeit”
- 前缀为AS_ADMIN_USERPASSWORD的用户密码
- 别名为AS_ADMIN_ALIASPASSWORD的别名密码
因此,例如,如果我们需要使用管理员密码“ mypassword”运行命令,那么密码文件中必须包含以下行:
AS_ADMIN_PASSWORD=mypassword
然后,我们可以将密码与–passwordfile参数一起使用,如下所示:
asadmin list-applications --passwordfile=mypasswordfile
上面的命令不会等待输入密码,而是会立即列出服务器上的所有应用程序。 如果密码不正确,该命令将失败。
从脚本非交互更改密码
到目前为止,至少在旧版GlassFish v3文档中已记录了所有内容。 但是,文档中缺少的是,如果我们想从脚本中更改密码,该如何从文件中指定新密码。 当我们执行命令以更改没有密码文件的任何密码(例如,管理员密码或主密码)时,该命令将要求2个密码-旧密码和新密码。 因此,我们需要在文件中指定2个密码。
解决方案是将新密码的另一个变量添加到同一密码文件中。 新密码的变量以AS_ADMIN_NEW前缀为前缀。 因此,要更改主密码,我们的密码文件中需要以下两行:
AS_ADMIN_MASTERPASSWORD=oldmasterpassword
AS_ADMIN_NEWMASTERPASSWORD=newmasterpassword
然后,我们可以将两个密码与–passwordfile参数一起使用,如下所示:
asadmin change-master-password --passwordfile=mypasswordfile
上面的命令不会等待输入或重新输入任何密码,而是会立即将服务器上的主密码更改为newmasterpassword。 如果旧密码不正确,该命令将失败。
在Docker映像中更改密码
在Docker中,首选方法是在映像中配置服务器,以便在执行容器时自动应用配置。 避免配置容器,因为在容器中运行asadmin命令并不容易,并且更改某些密码(例如主密码)需要重新启动服务器。
默认的Payara Server Docker映像已包含asadmin命令,这些命令可更改管理员密码。 您可以复制创建/ opt / tmpfile的行,并将其与change-admin-password命令一起使用以更改管理员密码。
可以更改主密码。 以下是将主密码更改为newpassword的示例自定义Dockerfile:
<span class="pln">FROM payara</span><span class="pun">/</span><span class="pln">server</span><span class="pun">-</span><span class="pln">full
</span>
<span class="pun">#</span><span class="pln"> specify a </span><span class="kwd">new</span><span class="pln"> master password </span><span class="str">"newpassword"</span><span class="pln"> instead of the </span><span class="kwd">default</span><span class="pln"> password </span><span class="str">"changeit"</span><span class="pln">
RUN echo </span><span class="str">'AS_ADMIN_MASTERPASSWORD=changeit\nAS_ADMIN_NEWMASTERPASSWORD=newpassword'</span> <span class="pun">>></span> <span class="pun">/</span><span class="pln">opt</span><span class="pun">/</span><span class="pln">masterpwdfile
</span><span class="pun">#</span><span class="pln"> execute asadmin command to apply the </span><span class="kwd">new</span><span class="pln"> master password
RUN $</span><span class="pun">{</span><span class="pln">PAYARA_PATH</span><span class="pun">}/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">asadmin change</span><span class="pun">-</span><span class="pln">master</span><span class="pun">-</span><span class="pln">password </span><span class="pun">--</span><span class="pln">passwordfile</span><span class="pun">=/</span><span class="pln">opt</span><span class="pun">/</span><span class="pln">masterpwdfile</span>
在当前目录中使用上述Dockerfile,您可以使用以下命令构建自定义Docker映像:
docker build -t my-payara/server-full .
然后运行my-payara / server-full而不是payara / server-full。
您可以使用以下命令在docker容器中验证主密码是否已更改:
docker run -t -i --entrypoint keytool payara/server-full:masterpwd -list -keystore /opt/payara41/glassfish/domains/domain1/config/keystore.jks
如果键入新的主密码,则应该看到密钥库的内容以及证书列表。
翻译自: https://www.javacodegeeks.com/2017/11/configure-passwords-payara-server-glassfish.html