如何使用 Dockerfile 安装 karaf 功能

How to install karaf features using Dockerfile

我正在尝试创建一个 Dockerfile,它将自动安装 apache karaf 并将其配置为正常工作。

我要安装功能列表。我可以用下面的

docker exec -it 7447419c89da  /opt/karaf/bin/client

但我想使该过程自动化。我可以 运行 使用什么命令来安装这些功能?

您可以使用 XML 文件 (Feature Repository] 并将其复制到 .../apache-karaf-4.1.5/deploy文件夹。然后它将由 Karaf 在 start-time 期间 picked-up 并且文件中描述的功能将自动安装,如果它们具有指定的属性:install="auto".

示例文件:

<features
        name="AET Features"
        xmlns="http://karaf.apache.org/xmlns/features/v1.3.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.3.0 http://karaf.apache.org/xmlns/features/v1.3.0">

    <repository>mvn:org.apache.cxf.karaf/apache-cxf/3.2.0/xml/features</repository>

    <feature name="fooo" version="1.0.0" description="Features that should be installed" install="auto">
        <feature>cxf-core</feature>
        <feature>webconsole</feature>
        <bundle>mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.features/4.1.2</bundle>
    </feature>

</features>

这将安装名为 fooo 的新功能,其中包含 cxf-core 功能 - 仅用于此示例(此需要自己的存储库位置),Karaf 上可用的 webconsole 功能和在 Web 控制台中提供功能视图的附加包。

总结一下:

  1. 下载解压Karaf
  2. 创建一个具有某个名称的文件,即:required-features.xml 具有功能描述
  3. 启动 Karaf 实例

您可以在 Karaf 源中找到特征文件的示例,例如:

https://github.com/apache/karaf/blob/master/assemblies/features/spring/src/main/feature/feature.xml

TL;DR - 将特征作为参数传递给 client 作为 docker exec -it 7447419c89da /opt/karaf/bin/client -r 7 "feature:install http; feature:install webconsole"

我认为 是正确的,它应该是这样工作的。

然而,当我构建 my own Dockerfile for iDempiere Micro on Karaf to automatically install Apache Karaf、安装其他功能(例如 WebConsole)并部署我的包时,我发现实现此目的的唯一方法是:

  1. 在 Dockerfile 中安装 Apache Karaf,还包括其他帮助程序 shell 脚本,请勿尝试安装功能
  2. 用 Karaf 启动 docker,让它启动并等待一段时间(在我的测试环境中,它最多需要 120 秒才能准备好)
  3. 运行 /opt/karaf/bin/client 如您的问题一样,并将所需的功能作为参数传递给 docker exec -i idempiere-micro-karaf /opt/karaf/bin/client -r 7 "feature:install http; feature:install http-whiteboard; feature:install war; feature:install webconsole"
  4. 再等等,使用docker exec -i idempiere-micro-karaf /opt/karaf/bin/client "system:shutdown -f -r"
  5. 重启Apache Karaf