采用docker部署时kafka共享zookeeper的网络配置
  ajtZ4dACL54c 2023年11月02日 33 0


采用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之后,即可见到:

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

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 containerdocker 容器的网络模式Docker的网络模式bridge、host、container other、overlay


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  X7HGjGJ7MG9G   2023年11月02日   21   0   0 文件复制Docker
ajtZ4dACL54c
最新推荐 更多