采用docker部署时kafka共享zookeeper的网络配置

当使用Docker部署Kafka和Zookeeper时,通常创建一个共享网络,但在生产环境中由于导致服务器无法访问,这种方法被禁止。为了解决这个问题,文章提出了使用容器共享网络配置的方案,即Kafka容器连接到Zookeeper容器的网络,避免直接创建网络。具体步骤包括不再创建自定义网络,而是直接在Zookeeper容器中映射所有必要的端口,然后让Kafka容器使用Zookeeper的网络,并配置相应的环境变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

采用docker部署kafka、zookeeper,一般的做法是创建一个docker网络,然后kafka、zookeeper都使用这个网络。问题是,我部署到生产环境的时候,这种做法被禁止了。原因是添加了这个docker网络以后,服务器就无法访问了。该服务器是通过互联网访问的。我也不知道为啥就会搞到他们网络崩溃,总之就是不允许。

那怎么办?

经摸索,证明可以采用两个docker容器共享其中一个容器的网络配置的做法。众所周知,docker容器各自独立,相互区隔,自成一个世界。同一个网络,就是为了能够互相访问。创建docker网络如此,共享容器网络如此,都是这个目的。

以下是操作记录,以及相应学习。

一、共享容器网络配置

(一)原先创建docker网络方案

1、首先创建一个网络

sudo docker network create app-tier --driver bridge

2、安装zookeeper

sudo docker run --restart=always -d --name zookeeper-server \
    --network app-tier \
    -p 2181:2181 \
    -e ALLOW_ANONYMOUS_LOGIN=yes \
    bitnami/zookeeper:latest

3、安装Kafka

sudo docker run --restart=always -d --name kafka-server \
    --network app-tier \
    -p 8004:9092 \
    -e ALLOW_PLAINTEXT_LISTENER=yes \
    -e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 \
    -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.10.249:8004 \
    bitnami/kafka:latest

(二)共享容器网络配置方案

1、安装zookeeper,并映射所有要用到的端口

sudo docker run \
    --restart=always -d --name zookeeper-server \
    -p 2181:2181 \
    -p 8004:9092 \
    -e ALLOW_ANONYMOUS_LOGIN=yes \
    bitnami/zookeeper:latest    

2、安装Kafka

脚本中,–net=container:zookeeper-server,意为使用容器zookeeper-server的网络。注意到端口8004:9092放在了创建容器zookeeper-server时进行了设置。因为 --net=container 模式下,是不允许再进行端口暴露设置(-p host port : container port )的。但由于共享了容器zookeeper-server的网络配置,因此在创建容器zookeeper-server时设置即可。

sudo docker run --restart=always -d --name kafka-server \
    --net=container:zookeeper-server \
    -e ALLOW_PLAINTEXT_LISTENER=yes \
    -e KAFKA_CFG_ZOOKEEPER_CONNECT=localhost:2181 \
    -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.122.1:8004 \
    bitnami/kafka:latest

二、docker的网络模式

docker有以下几种网络模式:bridge、host、container、none和overlay。安装docker之后,即可见到:
在这里插入图片描述

1、bridge

默认模式。一般我们创建容器就是用了这种模式(无须显示指定)。为了让外部能够访问到docker容器,应当暴露一些端口,-p host port : container port,我们都很熟悉了。

2、host

docker就直接基于宿主机的网络,理论上外部可以直接访问这个docker容器。这样的话,docker的区隔性、安全性会有所削弱。

3、container

就是上面提到的,共享容器网络配置模式。

4、none

啥网络模式都不分配,由docker容器里面的程序自己实现,便于它想怎么搞就怎么搞。

5、overlay

跨主机的docker容器互访。

参考文章:
My kafka docker container cannot connect to my zookeeper docker container
docker 容器的网络模式
Docker的网络模式bridge、host、container other、overlay

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值