访问自定义networking中的泊坞窗容器的IP地址

我正在使用docker工具来开始kafka和zookeeper

我的docker撰写如下:

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的容器,并启动一个运行成功连接到zookeeper的kafka服务器的容器。

另外,我可以通过以下命令成功创build一个kafka生产者和一个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 

现在我面临的问题是,在configuration中,在kafka服务器上的广告主设置为kafka ,这阻止了我从本地连接到kafka服务器。

我使用kafka-python库以下面的方式连接到kafka:

 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不起作用,因为代码在本地运行而不在泊坞窗networking中运行。

我不知道如何解决这个问题。

在下面的/etc/hosts一个主机条目

 127.0.0.1 kafka 

当你想在docker主机上使用你的代码时,上面的代码就可以工作。 如果你想在其他机器上使用它,那么你应该使用

 <DockerHostIP> kafka 

基本上,当广告名称返回kafka时,您想要parsing名称