我想两者都用 confluent/kafka
以及 confluent/zookeeper
在一台ubuntu服务器上运行。
我正在使用以下配置:
docker run -e ZOOKEEPER_CLIENT_PORT=2181 --name zookeeper confluent/zookeeper docker run --name kafka -e KAFKA_ADVERTISED_HOST_NAME=kafka -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_CREATE_TOPICS=testtopic:1:1 confluent/kafka
但是,这会导致:无法连接到zookeeper:2181
我想连接其他容器,如何通过zookeeper:2181 and Kafka大道kafka:9092 ?
3条答案
按热度按时间uujelgoq1#
docker启动隔离网络中的容器,称为
default bridge
除非明确指定网络。你可以通过不同的方式获得成功,这里有两个最简单的方法:
将容器放入同一用户定义的网桥网络中
暴露端口并通过本地主机连接
注意:在第二种方法中,您应该使用
host.docker.internal
作为主机名和公开(发布)端口2181
对于第一个使其在本地主机上可用的容器ngynwnxp2#
不过我用的是mac电脑,效果不错。由于“主机”网络在mac上不起作用,我只创建了一个名为
kafka_net
把容器放在那里。确保所有工作正常:
然后登录zookeeper容器
然后登录Kafka容器
如果仍然给出问题,看看官方的例子。https://github.com/confluentinc/cp-docker-images/tree/5.2.2-post/examples 而且还在发帖,会出手的。
s8vozzvw3#
有多种方法可以做到这一点。但在我们研究它之前,您需要了解您的方法中有两个问题
zookeper
使用时无法访问主机docker run
因为每个容器都在不同的网络隔离中运行kafka
可能会启动并尝试连接到zookeeper
但是zookeeper
还没准备好解决网络问题
你可以做很多事情来解决问题
使用
--net=host
在主机网络上同时运行使用
docker network create <name>
然后使用--net=<name>
同时发射两个集装箱或者你可以在电脑上运行你的Kafka容器
zookeeper
集装箱网络。使用
--net=container:zookeeper
启动时kafka
容器。这将确保zookeeper
主机可访问。除非你有充分的理由这样做,否则不建议这样做。因为一旦zookeeper
集装箱倒了,你的网络也会倒kafka
容器。但为了理解,我把这个选项放在这里解决创业竞赛问题
或者你可以在两个开始之间保持一个间隔
zookeeper
以及kafka
,以确保kafka
开始zookeeper
正在启动并运行另一种选择是使用
--restart=on-failure
带docker run的标志。这将确保容器在发生故障时重新启动,并尝试重新连接到zookeeper
希望那一次zookeeper
我要起床了。而不是使用
docker run
我总是更喜欢docker-compose
运行这样的链接容器。你可以通过创建一个简单的docker-compose.yml
然后用docker-compsoe up
```version: "3.4"
services:
zookeeper:
image: confluent/zookeeper
environment:
- ZOOKEEPER_CLIENT_PORT=2181
kafka:
image: confluent/kafka
environment:
- KAFKA_ADVERTISED_HOST_NAME=kafka
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
- KAFKA_CREATE_TOPICS=testtopic:1:1
depends_on:
- zookeeper
restart: on-failure