2017-09-23 66 views
0

訪問泊塢窗容器的IP地址,我使用泊塢窗撰寫啓動卡夫卡和飼養員在自定義網絡

我的碼頭工人,撰寫如下:

version: '3' 
services: 
    zookeeper: 
    image: zookeeper:3.4 
    networks: 
     - pipeline 

    kafka: 
    image: ches/kafka 
    networks: 
     - pipeline 
    environment: 
     - ZOOKEEPER_IP=zookeeper 
    ports: 
     - "9092:9092" 
    links: 
     - zookeeper:zookeeper 
    depends_on: 
     - zookeeper 

networks: 
    pipeline: 

所以這將啓動一個容器中運行動物園管理員並啓動運行成功連接到zookeeper的kafka服務器的容器。

此外,我可以成功地創建一個卡夫卡生產者和卡夫卡消費者可以通過以下指令相互之間進行通信:

監製:

docker run --rm -it --network pipeline_pipeline ches/kafka \ 
    kafka-console-producer.sh --topic pipeline-dev \ 
    --broker-list kafka:9092 

消費者:

docker run --rm --network pipeline_pipeline ches/kafka \ 
    kafka-console-consumer.sh --topic pipeline-dev \ 
    --from-beginning \ 
    --bootstrap-server kafka:9092 

現在我面臨的問題是在配置中,kafka服務器上的ADVERTISED HOST被設置爲kafka,這阻止了我的連接從本地登錄到kafka服務器。

我使用kafka-python庫連接到卡夫卡下列方式:

from kafka import KafkaConsumer 

consumer = KafkaConsumer('pipeline-dev', bootstrap_servers='localhost:9092') 

print 'starting to listen' 
for msg in consumer: 
    print msg 

但在這裏我得到的錯誤經紀人不可!這是因爲我已經將引導程序服務器設置爲localhost:9092。即使我已轉發端口,但我無法連接到kafka服務器,因爲廣告主的名稱是kafka而不是localhost

將引導程序服務器設置爲kafka:9092不起作用,因爲代碼在本地運行,而不在碼頭網絡中運行。

我不知道如何解決這個問題。

+0

讓你'的/ etc/hosts'主機條目與' kafka'並看看是否能使它工作? –

+0

@TarunLalwani該方法的問題在於碼頭集裝箱在碼頭網絡中,因此「碼頭檢查 - 格式化」{{.NetworkSettings.IPAddress}}'pipeline_kafka'不會給我IP!我不是很確定如何從網絡外部訪問碼頭集裝箱的IP –

+0

對不起,我應該說'127.0.0.1'而不是'',如果它是運行python代碼的碼頭主機。否則它會是碼頭主機ip –

回答

1

讓像下面

127.0.0.1 kafka 

當你想用你的代碼泊塢窗主機上面將工作在你的/etc/hosts主機條目。如果你想使用它的一些其他的機器上,那麼你應該使用

<DockerHostIP> kafka 

基本上你想有解析的名稱時,廣告名稱返回kafka

+0

超級非常感謝。我試過的是在/ etc/hosts'localhost kafka'中添加以下內容。但從你的回答中,我意識到這是行不通的,因爲localhost是一個主機名,然後映射到實際的IP「127.0.0.1」,所以最終主機名未被正確解析! –