2016-11-07 169 views
2

我有一個docker-compose文件,其中包含多個服務容器定義。其中一項服務與Apache Kafka在同一碼頭組合運行中進行通信。找出Docker容器中的IP地址

所以我有卡夫卡泊塢窗的定義是這樣的:

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

我有同樣的搬運工,撰寫文件,我的服務定義。在服務的啓動腳本中,我必須弄清楚Kafka實例的IP地址。

我知道,我可以使用類似docker inspect的東西來找出容器使用哪個IP地址。

但是,如何在docker-compose環境中動態執行此操作?

編輯

所以,正確的配置應該是(謝謝你,@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。

將端口號(在您的情況下爲9092)添加到容器的IP以獲取任何kafka正在提供的服務。

相關問題