JBoss Fuse アプリが docker ビルドで動作しない

JBoss Fuse アプリが docker ビルドで動作しない

JBoss Fuse、特に AMQ で発生している問題のトラブルシューティングを手伝ってくれる人がいればと思っています。バージョン 6.0.0.redhat-024 と 6.0.0.redhat-024-p5 を使用しています。これをコンテナーにデプロイしようとしているのですが、AMQ で問題が発生しているようです。アプリケーションをデプロイするときの問題は次のとおりです。

[root@4ca73a25d4cf home]# client -r 2 -d 60 -u admin -p admin "features:install example-app"
Refreshing bundles org.springframework.context.support (104)
Error executing command: Could not start bundle mvn:com.example/example.broker.services/1.0-SNAPSHOT in feature(s) example-base-0.0.0: Unresolved constraint in bundle example.broker.services [254]: Unable to resolve 254.0: missing requirement [254.0] osgi.wiring.package; (osgi.wiring.package=org.apache.activemq)

明らかに、これは依存関係の不足の問題のように見えますが、この問題は docker ビルド プロセスの一部としてアプリケーションをインストールしようとしたときにのみ発生するため、これは Red Herring であると確信しています。これを証明するには、次の方法があります。

  1. 同じOSの仮想マシンにアプリを正常にインストールしました
  2. docker build を使用せずに空のコンテナにアプリをインストールしました (つまり、コンテナを実行し、その中で exec を実行し、Fuse とアプリのインストールを手動で実行します)

上記の 2 つの方法では問題は発生しません。アプリは期待どおりにインストールされ、実行されます。上記のインストールで使用したコマンドは、ビルドに使用している Dockerfile から取得したものです。この問題は、(何らかの形で) docker ビルドに関連しているようです。

アプリをインストールすると、AMQ に何かが実行されるようです。アプリケーションのインストール時点までコンテナーをビルドすると、AMQ 機能は正常です。

[root@8cdbdd27720a home]# client -r 2 -d 60 -u admin -p admin "osgi:list | grep 118"
[ 118] [Active     ] [Created     ] [       ] [   50] activemq-karaf (5.8.0.redhat-60024)
[root@8cdbdd27720a home]# client -r 2 -d 60 -u admin -p admin "osgi:list | grep 128"
[ 128] [Active     ] [            ] [       ] [   60] JBoss A-MQ Fabric (6.0.0.redhat-057)

バンドルを更新、開始、停止すると、すべて正常になります。

[root@8cdbdd27720a home]# client -r 2 -d 60 -u admin -p admin "osgi:refresh 118" 
[root@8cdbdd27720a home]# client -r 2 -d 60 -u admin -p admin "osgi:list | grep 118"
[ 118] [Active     ] [Created     ] [       ] [   50] activemq-karaf (5.8.0.redhat-60024)
[root@8cdbdd27720a home]# client -r 2 -d 60 -u admin -p admin "osgi:stop 118"
[root@8cdbdd27720a home]# client -r 2 -d 60 -u admin -p admin "osgi:start 118"

[root@8cdbdd27720a home]# client -r 2 -d 60 -u admin -p admin "osgi:headers 118"

activemq-karaf (118)
--------------------
Manifest-Version = 1.0
Bnd-LastModified = 1365188424349
Tool = Bnd-1.50.0
Built-By = mockbuild
Embed-Transitive = true
Implementation-Version = 5.8.0.redhat-60024
Build-Jdk = 1.6.0_24
Implementation-Title = Apache ActiveMQ
Created-By = Apache Maven Bundle Plugin

Bundle-Vendor = Red Hat, Inc.
Bundle-Name = activemq-karaf
Bundle-DocURL = http://redhat.com
Bundle-Description = Provides resources for running ActiveMQ in Apache Karaf
Bundle-SymbolicName = activemq-karaf
Bundle-Version = 5.8.0.redhat-60024
Bundle-License = http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-ManifestVersion = 2

Export-Service = 
    org.apache.felix.service.command.Function;
        osgi.command.function=browse;
        osgi.command.scope=activemq,
    org.apache.felix.service.command.Function;
        osgi.command.function=bstat;
        osgi.command.scope=activemq,
    org.apache.felix.service.command.Function;
        osgi.command.function=purge;
        osgi.command.scope=activemq,
    org.apache.felix.service.command.Function;
        osgi.command.function=query;
        osgi.command.scope=activemq,
    org.apache.felix.service.command.Function;
        osgi.command.function=list;
        osgi.command.scope=activemq

Import-Package = 
    org.apache.activemq.console,
    org.apache.activemq.console.command,
    org.apache.activemq.console.formatter,
    org.apache.felix.gogo.commands;version="[0.11,1)",
    org.apache.felix.gogo.commands.basic;version="[0.11,1)",
    org.apache.felix.service.command;status=provisional;version="[0.11,1)",
    org.apache.karaf.shell.console;version="[2.3,3)",
    org.apache.karaf.shell.console.commands;version="[2.3,3)",
    org.osgi.framework;version="[1.3,2)",
    org.osgi.service.blueprint;version="[1.0.0,2.0.0)",
    org.osgi.service.blueprint.container;version="[1.0,2)"
Export-Package = 
    org.apache.activemq.karaf.commands;
        uses:="org.apache.felix.service.command,
            org.apache.felix.gogo.commands.basic,
            org.apache.felix.gogo.commands,
            org.osgi.service.blueprint.container,
            org.apache.karaf.shell.console.commands,
            org.apache.karaf.shell.console,
            org.osgi.framework,
            org.apache.activemq.console.command,
            org.apache.activemq.console.formatter,
            org.apache.activemq.console";
        version=5.8.0.redhat-60024

[root@8cdbdd27720a home]# client -r 2 -d 60 -u admin -p admin "osgi:headers 128"

JBoss A-MQ Fabric (128)
-----------------------
Specification-Title = JBoss A-MQ Fabric
Tool = Bnd-1.15.0
Specification-Version = 6.0.0.redhat-057
Specification-Vendor = Red Hat
Embed-Dependency = !*
Implementation-Version = 6.0.0.redhat-057
Build-Jdk = 1.6.0_45
Implementation-Vendor-Id = org.jboss.amq
Created-By = Apache Maven Bundle Plugin
Implementation-Title = JBoss A-MQ Fabric
Manifest-Version = 1.0
Bnd-LastModified = 1385007431709
Built-By = hudson
Implementation-Vendor = Red Hat

Bundle-Vendor = Red Hat
Bundle-Activator = org.fusesource.mq.fabric.Activator
Bundle-Name = JBoss A-MQ Fabric
Bundle-DocURL = http://fabric.fusesource.org/
Bundle-Description = JBoss A-MQ Fabric
Bundle-SymbolicName = org.jboss.amq.mq-fabric
Bundle-Version = 6.0.0.redhat-057
Bundle-License = http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-ManifestVersion = 2

Export-Service = 
    javax.jms.ConnectionFactory

Import-Package = 
    javax.jms;version="[1.1,2)",
    org.apache.activemq,
    org.apache.activemq.broker,
    org.apache.activemq.command,
    org.apache.activemq.network,
    org.apache.activemq.spring,
    org.apache.activemq.transport.discovery,
    org.apache.activemq.util,
    org.apache.xbean.spring.context;version="[3.12,4)",
    org.apache.xbean.spring.context.impl;version="[3.12,4)",
    org.apache.zookeeper;version="[3.4,4)",
    org.codehaus.jackson.annotate;version="[1.9,2)",
    org.fusesource.fabric.groups;version="[7.2,7.3)",
    org.fusesource.fabric.groups.internal;version="[7.2,7.3)",
    org.fusesource.fabric.zookeeper;version="[7.2,7.3)",
    org.fusesource.fabric.zookeeper.internal;version="[7.2,7.3)",
    org.fusesource.fabric.zookeeper.utils;version="[7.2,7.3)",
    org.linkedin.util.clock,
    org.osgi.framework;version="[1.6,2)",
    org.osgi.service.cm;version="[1.4,2)",
    org.osgi.util.tracker;version="[1.5,2)",
    org.slf4j;version="[1.6,2)",
    org.springframework.beans.factory;version="[3,4)",
    org.springframework.beans.factory.xml;version="[3,4)",
    org.springframework.context.support;version="[3,4)",
    org.springframework.core.io;version="[3,4)",
    scala;version="[2.9,2.10]",
    scala.collection;version="[2.9,2.10]",
    scala.collection.generic;version="[2.9,2.10]",
    scala.collection.immutable;version="[2.9,2.10]",
    scala.collection.mutable;version="[2.9,2.10]",
    scala.reflect;version="[2.9,2.10]",
    scala.runtime;version="[2.9,2.10]"
Export-Package = 
    org.fusesource.mq.fabric;
        uses:="scala.reflect,
            org.osgi.framework,
            org.osgi.service.cm,
            scala,
            org.springframework.core.io,
            org.springframework.beans.factory.xml,
            org.apache.xbean.spring.context,
            scala.runtime,
            scala.collection,
            scala.collection.mutable,
            org.apache.activemq.broker,
            org.fusesource.fabric.zookeeper,
            org.apache.activemq.network,
            org.apache.activemq.util,
            org.slf4j,
            org.apache.activemq.spring,
            org.apache.xbean.spring.context.impl,
            scala.collection.generic,
            org.fusesource.fabric.groups,
            scala.collection.immutable,
            javax.jms,
            org.apache.activemq,
            org.springframework.context.support,
            org.fusesource.fabric.groups.internal,
            org.osgi.util.tracker,
            org.springframework.beans.factory,
            org.apache.activemq.transport.discovery,
            org.apache.activemq.command,
            org.codehaus.jackson.annotate,
            org.fusesource.fabric.zookeeper.utils,
            org.apache.zookeeper,
            org.linkedin.util.clock,
            org.fusesource.fabric.zookeeper.internal";
        version=7.2.0.redhat-057

次のコマンドを使用してアプリケーションをインストールしようとすると:

client -r 2 -d 60 -u admin -p admin "addurl mvn:com.example/example.features/1.0-SNAPSHOT/xml/features"
client -r 2 -d 60 -u admin -p admin "features:install example-app"

上記のエラー メッセージが表示されますが、その結果 AMQ バンドルが失敗したようです。

[root@8cdbdd27720a home]# client -r 2 -d 60 -u admin -p admin "osgi:headers 118"

activemq-karaf (118)
--------------------
Manifest-Version = 1.0
Bnd-LastModified = 1365188424349
Tool = Bnd-1.50.0
Built-By = mockbuild
Embed-Transitive = true
Implementation-Version = 5.8.0.redhat-60024
Build-Jdk = 1.6.0_24
Implementation-Title = Apache ActiveMQ
Created-By = Apache Maven Bundle Plugin

Bundle-Vendor = Red Hat, Inc.
Bundle-Name = activemq-karaf
Bundle-DocURL = http://redhat.com
Bundle-Description = Provides resources for running ActiveMQ in Apache Karaf
Bundle-SymbolicName = activemq-karaf
Bundle-Version = 5.8.0.redhat-60024
Bundle-License = http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-ManifestVersion = 2

Export-Service = 
    org.apache.felix.service.command.Function;
        osgi.command.function=browse;
        osgi.command.scope=activemq,
    org.apache.felix.service.command.Function;
        osgi.command.function=bstat;
        osgi.command.scope=activemq,
    org.apache.felix.service.command.Function;
        osgi.command.function=purge;
        osgi.command.scope=activemq,
    org.apache.felix.service.command.Function;
        osgi.command.function=query;
        osgi.command.scope=activemq,
    org.apache.felix.service.command.Function;
        osgi.command.function=list;
        osgi.command.scope=activemq

Import-Package = 
    org.apache.activemq.console,        <--- RED
    org.apache.activemq.console.command,    <--- RED
    org.apache.activemq.console.formatter,  <--- RED
    org.apache.felix.gogo.commands;version="[0.11,1)",
    org.apache.felix.gogo.commands.basic;version="[0.11,1)",
    org.apache.felix.service.command;status=provisional;version="[0.11,1)",
    org.apache.karaf.shell.console;version="[2.3,3)",
    org.apache.karaf.shell.console.commands;version="[2.3,3)",
    org.osgi.framework;version="[1.3,2)",
    org.osgi.service.blueprint;version="[1.0.0,2.0.0)",
    org.osgi.service.blueprint.container;version="[1.0,2)"
Export-Package = 
    org.apache.activemq.karaf.commands;
        uses:="org.apache.felix.service.command,
            org.apache.felix.gogo.commands.basic,
            org.apache.felix.gogo.commands,
            org.osgi.service.blueprint.container,
            org.apache.karaf.shell.console.commands,
            org.apache.karaf.shell.console,
            org.osgi.framework,
            org.apache.activemq.console.command,
            org.apache.activemq.console.formatter,
            org.apache.activemq.console";
        version=5.8.0.redhat-60024

When I try and start it:

[root@8cdbdd27720a home]# client -r 2 -d 60 -u admin -p admin "osgi:start 118"
Error executing command: Error starting bundles:
    Unable to start bundle 118: Unresolved constraint in bundle activemq-karaf [118]: Unable to resolve 118.0: missing requirement [118.0] osgi.wiring.package; (osgi.wiring.package=org.apache.activemq.console)

JBoss AMQ バンドルの場合も同様です:

[root@8cdbdd27720a home]# client -r 2 -d 60 -u admin -p admin "osgi:headers 128"

JBoss A-MQ Fabric (128)
-----------------------
Specification-Title = JBoss A-MQ Fabric
Tool = Bnd-1.15.0
Specification-Version = 6.0.0.redhat-057
Specification-Vendor = Red Hat
Embed-Dependency = !*
Implementation-Version = 6.0.0.redhat-057
Build-Jdk = 1.6.0_45
Implementation-Vendor-Id = org.jboss.amq
Created-By = Apache Maven Bundle Plugin
Implementation-Title = JBoss A-MQ Fabric
Manifest-Version = 1.0
Bnd-LastModified = 1385007431709
Built-By = hudson
Implementation-Vendor = Red Hat

Bundle-Vendor = Red Hat
Bundle-Activator = org.fusesource.mq.fabric.Activator
Bundle-Name = JBoss A-MQ Fabric
Bundle-DocURL = http://fabric.fusesource.org/
Bundle-Description = JBoss A-MQ Fabric
Bundle-SymbolicName = org.jboss.amq.mq-fabric
Bundle-Version = 6.0.0.redhat-057
Bundle-License = http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-ManifestVersion = 2

Export-Service = 
    javax.jms.ConnectionFactory

Import-Package = 
    javax.jms;version="[1.1,2)",
    org.apache.activemq,                                <--- RED
    org.apache.activemq.broker,                         <--- RED
    org.apache.activemq.command,                        <--- RED
    org.apache.activemq.network,                        <--- RED
    org.apache.activemq.spring,                         <--- RED
    org.apache.activemq.transport.discovery,            <--- RED
    org.apache.activemq.util,                           <--- RED
    org.apache.xbean.spring.context;version="[3.12,4)",
    org.apache.xbean.spring.context.impl;version="[3.12,4)",
    org.apache.zookeeper;version="[3.4,4)",
    org.codehaus.jackson.annotate;version="[1.9,2)",
    org.fusesource.fabric.groups;version="[7.2,7.3)",
    org.fusesource.fabric.groups.internal;version="[7.2,7.3)",
    org.fusesource.fabric.zookeeper;version="[7.2,7.3)",
    org.fusesource.fabric.zookeeper.internal;version="[7.2,7.3)",
    org.fusesource.fabric.zookeeper.utils;version="[7.2,7.3)",
    org.linkedin.util.clock,
    org.osgi.framework;version="[1.6,2)",
    org.osgi.service.cm;version="[1.4,2)",
    org.osgi.util.tracker;version="[1.5,2)",
    org.slf4j;version="[1.6,2)",
    org.springframework.beans.factory;version="[3,4)",
    org.springframework.beans.factory.xml;version="[3,4)",
    org.springframework.context.support;version="[3,4)",
    org.springframework.core.io;version="[3,4)",
    scala;version="[2.9,2.10]",
    scala.collection;version="[2.9,2.10]",
    scala.collection.generic;version="[2.9,2.10]",
    scala.collection.immutable;version="[2.9,2.10]",
    scala.collection.mutable;version="[2.9,2.10]",
    scala.reflect;version="[2.9,2.10]",
    scala.runtime;version="[2.9,2.10]"
Export-Package = 
    org.fusesource.mq.fabric;
        uses:="scala.reflect,
            org.osgi.framework,
            org.osgi.service.cm,
            scala,
            org.springframework.core.io,
            org.springframework.beans.factory.xml,
            org.apache.xbean.spring.context,
            scala.runtime,
            scala.collection,
            scala.collection.mutable,
            org.apache.activemq.broker,
            org.fusesource.fabric.zookeeper,
            org.apache.activemq.network,
            org.apache.activemq.util,
            org.slf4j,
            org.apache.activemq.spring,
            org.apache.xbean.spring.context.impl,
            scala.collection.generic,
            org.fusesource.fabric.groups,
            scala.collection.immutable,
            javax.jms,
            org.apache.activemq,
            org.springframework.context.support,
            org.fusesource.fabric.groups.internal,
            org.osgi.util.tracker,
            org.springframework.beans.factory,
            org.apache.activemq.transport.discovery,
            org.apache.activemq.command,
            org.codehaus.jackson.annotate,
            org.fusesource.fabric.zookeeper.utils,
            org.apache.zookeeper,
            org.linkedin.util.clock,
            org.fusesource.fabric.zookeeper.internal";
        version=7.2.0.redhat-057

バンドルを起動すると、次のエラーが発生します。

[root@8cdbdd27720a home]# client -r 2 -d 60 -u admin -p admin "osgi:start 128"
Error executing command: Error starting bundles:
    Unable to start bundle 128: Unresolved constraint in bundle org.jboss.amq.mq-fabric [128]: Unable to resolve 128.1: missing requirement [128.1] osgi.wiring.package; (osgi.wiring.package=org.apache.activemq)

なぜこのようなことが起こるのか知っている人はいますか? 手動で実行すると機能するのに、docker ビルドの一部として失敗するのはなぜでしょうか。

関連情報