2016-11-07 19 views
2

私はdocker-composeファイルにいくつかのサービスコンテナ定義を持っています。サービスの1つは、同じドッカーの作成実行内でApache Kafkaと通信します。ドッカーコンテナ内のIPアドレスを特定する

だから私はこのようなカフカのドッキングウィンドウの定義を持っている:

kafka: 
    image: spotify/kafka 
    ports: 
     - "2181:2181" 
     - "9092:9092" 
    environment: 
     ADVERTISED_HOST: 127.0.0.1 
     ADVERTISED_PORT: 9092 

私は同じドッキングウィンドウ・コンポーズファイルで私のサービス定義を持っています。サービスのスタートアップスクリプトでは、カフカインスタンスのIPアドレスを何とか把握しなければなりません。

私はdocker inspectのようなものを使用して、どのIPアドレスがコンテナによって使用されているかを知ることができます。

しかし、どのようにしてドッカー作成環境で動的に行うことができますか?

EDITは

ので、右の設定がなければなりません(、@nwinklerありがとう):

kafka: 
image: spotify/kafka 
ports: 
    - "2181:2181" 
    - "9092:9092" 
environment: 
    ADVERTISED_HOST: kafka 
    ADVERTISED_PORT: 9092 

myservice: 
image: foo 
links: 
    - kafka:kafka 

(または、あなたのカフカの命名方法ADVERTISED_HOSTkafkaに設定することを忘れないでください 容器はdocker-compose以内)。

+1

ホスト名として 'kafka'を使用して、' kafka'コンテナに接続できるはずです。 – tkausl

答えて

4

これにはDocker Compose Links機能を使用できます。他のコンテナからkafkaコンテナへのリンクを提供する場合、Docker Composeは他のコンテナがそのホスト名でKafkaコンテナにアクセスできるようにします。そのIPアドレスを知る必要はありません。

例:

kafka: 
    image: spotify/kafka 
    ports: 
     - "2181:2181" 
     - "9092:9092" 
    environment: 
     ADVERTISED_HOST: 127.0.0.1 
     ADVERTISED_PORT: 9092 

myservice: 
    image: foo 
    links: 
     - kafka:kafka 

これはあなたのmyserviceコンテナがkafkaホスト名を通じてカフカのコンテナにアクセスできるようになります。あなたのmyserviceコンテナから、curl http://kafka:9092のような何かをして、Kafkaコンテナのサービスにアクセスできます。

Docker-ComposeはDNS経由でコンテナにホスト名/ IPマッピングを作成し、IPアドレスを知らずにコンテナにアクセスできるようにします。

+0

それは動作します。驚くばかり!ありがとうございました。 – leshkin

+0

あなたは歓迎しています - それが今働いていると聞いてうれしい。 – nwinkler

1

あなたのコンテナのIPはあなたが探しているIPになります。

カフカが提供しているものを取得するには、コンテナのIPにポート番号(あなたの場合は9092)を追加します。

関連する問題