2017-10-26 11 views
0

私のMaven POMファイルは、テスト用のサービスを持つドッカーコンテナを作成します。また、これらのコンテナ内のサービスと対話する必要のあるテストを実行します。コンテナはdocker-compose.ymlファイルにリンクとして定義されたホスト名、例えばを使用して、お互いに話すことができます。:ドッカーコンテナと通信するときにローカルの/ etc/hostsを更新する

kafka: 
    image: spotify/kafka 
    hostname: kafka 
    environment: 
    ADVERTISED_HOST: kafka 
    ADVERTISED_PORT: 9092 
    ports: 
    - "9092:9092" 
our_service: 
    build: ../../logstash/ 
    ports: 
     - "8081:8080" 
    links: 
     - kafka 

各コンテナの/etc/hostsファイルは、クラスタ内の他のコンテナへのリンクを持つエントリが含まれ、これはあります。しかし、Mavenテストが実行されているクラスタの外部では、/etc/hostsは更新されず、Jenkins CIで実行されるため、更新したくありません。

確かに私のテストではlocalhost:9092でKafkaと話すことができましたが、Kafkaはカフカ名で宣伝していれば、ローカルホストではなく、カフカホストに接続する必要があります。同様ドッキングウィンドウコンテナ内

  1. 実行Mavenのテストが、それは別のMavenプロジェクトを実行するためのMavenプロジェクトが必要になります。私は、この問題を解決するにはどうすればよい

  2. 実行時にJVMのDNSキャッシュをプログラムによって更新します。

どちらも私にとっては汚い解決策のようです。

+0

多分私はあなたのセットアップを誤解しますが、どのようなテストをしていますか?あなたはkafkaへのコミュニケーションをテストしようとしているのですか、あるいはあなたのアプリケーションをテストしようとしていますか?もしそうなら、なぜカフカが必要ですか?モックなどは使用できませんか? – khmarbaise

+0

@khmarbaise私はKafkaからデータを読み取り、それらを変換して別のアプリケーションBに送信するアプリケーションAを持っています。私のテストでは、適切なデータを受け取ったかどうかを確認するためにアプリケーションBを偽っています。 – dzieciou

答えて

0

私は1つの提案をします(ただし、カフカの内部がこれを許可するかどうかはわかりません)。

kafka.127.0.0.1.nip.ioのように、127.0.0.1の名前を作成するには、nip.ioなどのDNSサービスを使用できます。あなたのサービスは、その後になる:

kafka: 
    image: spotify/kafka 
    hostname: kafka 
    environment: 
    ADVERTISED_HOST: kafka.127.0.0.1.nip.io 
    ADVERTISED_PORT: 9092 
    ports: 
    - "9092:9092" 
our_service: 
    build: ../../logstash/ 
    ports: 
     - "8081:8080" 
    links: 
     - kafka:kafka.127.0.0.1.nip.io 

今、両方の外側と内側の容器をごカフカの生産者がkafka.127.0.0.1.nip.ioに接続しますと、カフカが同じ名前として自分自身を宣伝する必要があります。

関連する問題