我想同时使用confluent/kafka
and 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访问zookeeper和通过kafka:9092访问kafka?
有多种方法可以做到这一点。但在我们研究它之前,您需要了解您的方法中有两个问题
-
zookeper
使用时无法访问主机docker run
因为每个容器都在不同的网络隔离中运行
-
kafka
可能会启动并尝试连接到zookeeper
but zookeeper
还没有准备好
解决网络问题
你可以做很多事情来解决问题
use --net=host
在主机网络上运行
use docker network create <name>
然后使用--net=<name>
启动两个容器时
或者您可以在以下位置运行您的 kafka 容器zookeeper
容器网络。
use --net=container:zookeeper
启动时kafka
容器。这将确保zookeeper
主机可访问。除非您有充分的理由这样做,否则不建议这样做。因为一旦zookeeper
容器出现故障,您的网络也会出现故障kafka
容器。但为了便于理解,我把这个选项放在这里
解决启动竞赛问题
要么你可以在开始之间保持一个间隙zookeeper
and kafka
,以确保当kafka
starts 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)