2017-09-23 63 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”,所以最终主机名未被正确解析! –