2017-09-26 8 views
6

私はWildfly-Swarmアプリを開発しています。私はサービス発見としてConsulを使用したいと思います。そこで私はトポロジー・コンマ区画を追加し、領事パスをproject-defaults.ymlに設定し、エンドポイントに@Advertise("service-name")を追加しました。Wildfly-Swarm領事サービスの発見 - 無効なサービスアドレス

そして、私は

java –jar my-swarm-app.jar 

すべてが問題なく動作を使用して自分のアプリケーションを起動した場合。

マイプロジェクトdefaults.yml:

service: 
    catalog: 
    service-name: "service-name" 
swarm: 
    port: 
    offset: 501 
    consul: 
    url: "http://172.30.3.80:8500" 

しかし、私はこのDockerfileとドッカーイメージ内の私の脂肪のjarファイルをパックするとき:

FROM openjdk:8-jre-alpine 
ADD my-swarm-app.jar /opt/my-swarm-app.jar 
EXPOSE 8581 
ENTRYPOINT ["java", "-jar", "-Djava.net.preferIPv4Stack=true", "/opt/my-swarm-app.jar"] 

それをビルドします。

docker build -f Dockerfile -t my-swarm-app . 

そして、次のように実行してください:

docker run -p 8581:8581 my-swarm-app 

私は例外を以下の取得:

2017-09-26 15:17:54,240 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC000001: Failed to start service swarm.topology.register.consent-service.http: org.jboss.msc.service.StartException in service swarm.topology.register.consent-service.http: com.orbitz.consul.ConsulException: Invalid service address 
     at org.wildfly.swarm.topology.deployment.RegistrationAdvertiser.start(RegistrationAdvertiser.java:79) 
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) 
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
     at java.lang.Thread.run(Thread.java:748) 
Caused by: com.orbitz.consul.ConsulException: Invalid service address 
     at com.orbitz.consul.AgentClient.register(AgentClient.java:180) 
     at com.orbitz.consul.AgentClient.register(AgentClient.java:184) 
     at org.wildfly.swarm.topology.consul.runtime.Advertiser.advertise(Advertiser.java:65) 
     at org.wildfly.swarm.topology.consul.runtime.ConsulTopologyConnector.advertise(ConsulTopologyConnector.java:60) 
     at org.wildfly.swarm.topology.deployment.RegistrationAdvertiser.start(RegistrationAdvertiser.java:77) 
     ... 5 more 

私が何か間違ったことをやっていますか?

EDIT: 私はconsul-apiを使用してサービス実装を実装しています。そのよう

 <dependency> 
      <groupId>com.ecwid.consul</groupId> 
      <artifactId>consul-api</artifactId> 
      <version>1.2.4</version> 
     </dependency> 

@ApplicationScoped 
public class Config { 

    private ConsulClient client; 

    @Inject 
    @ConfigurationValue("swarm.http.port") 
    private Integer port; 

    public void init(@Observes @Initialized(ApplicationScoped.class) ServletContext context) { 
     client = new ConsulClient("http://172.30.3.80:8500"); 

     // register new service with associated health check 
     NewService newService = new NewService(); 
     newService.setId("myapp_02"); 
     newService.setTags(Collections.singletonList("EU-East")); 
     newService.setName("myapp_aaa"); 
     newService.setPort(port); 

     client.agentServiceRegister(newService); 
    } 
} 

そして、ドッキングウィンドウの画像内のその作業。これはWildfly-Swarmトポロジの部分のバグでしょうか、設定が欠けていますか?

EDIT 2: この問題はwildfly swarm paramater -Djava.net.preferIPv4Stack=trueであることが判明しました。私は、このパラメータを使用してjarファイルを実行すると私は同じ例外を取得私はドッキングウィンドウの画像を作成するためにそれをDockerfileを削除し、それを実行した場合、私はこの例外を取得:

2017-09-27 20:34:46,460 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8) MSC000001: Failed to start service jboss.undertow.listener.default: org.jboss.msc.service.StartException in service jboss.undertow.listener.default: WFLYUT0082: Could not start 'default' listener. 
     at org.wildfly.extension.undertow.ListenerService.start(ListenerService.java:153) 
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) 
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:748) 
Caused by: java.net.SocketException: Protocol family unavailable 
     at sun.nio.ch.Net.bind0(Native Method) 
     at sun.nio.ch.Net.bind(Net.java:433) 
     at sun.nio.ch.Net.bind(Net.java:425) 
     at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) 
     at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) 
     at org.xnio.nio.NioXnioWorker.createTcpConnectionServer(NioXnioWorker.java:171) 
     at org.xnio.XnioWorker.createStreamConnectionServer(XnioWorker.java:245) 
     at org.wildfly.extension.undertow.HttpListenerService.startListening(HttpListenerService.java:126) 
     at org.wildfly.extension.undertow.ListenerService.start(ListenerService.java:142) 
     ... 5 more 

ここでは、エラーを再現することができますgithubのプロジェクトへのリンクあり: https://github.com/pkristja/wildfly-swarm-consul-demo

+0

ドッカーコンテナの内部には、http://172.30.3.80:8500を表示できますか? – Ken

+0

はい、表示されます。ルートの@ d324822a2809:/#カール-vのtelnet://172.30.3.80:8500 *リビルトURLをにします。telnet://172.30.3.80:8500/172.30.3.80をしようと * ... * TCP_NODELAYが接続 *を設定します〜172.30.3.80(172.30.3.80)port 8500(#0) – Kiki

+0

@Ken質問を更新しました。あなたはいくつかの新しい情報を持っていますか、またはWildfly-Swarm jiraに問題を公開すべきですか? – Kiki

答えて

2

thisと似ています。

swarm.bind.address: 127.0.0.1をyml構成に追加できますか。

関連する問題