docker容器之间如何进行网络通信

默认网络

安装Docker时,它会自动创建三个网络。你可以使用以下docker network ls命令列出这些网络

docker network ls

在这里插入图片描述
docker 运行新建容器的时候,默认使用 bridge 模式,
如果想更改,可以在 run 的时候,加上参数 --network name 进行修改。

Bridge模式

当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。这个和Vmware的桥接模式是一样的。但是docker默认禁止了容器之间的相互通信,所以,默认情况下(容器不指定 network 的情况下),容器和容器之间,网络是不通的。可以通过 配置–icc=true 来开启容器间的通信。但这意味着宿主机上的所有容器可以不受任何限制地相互通信,这可能导致拒绝服务攻击,所以不推荐

自定义网络实现容器间通信

创建网络
创建一个网络名为 zk-kfk-net 且 driver 为 bridge 的网络:(默认创建的就是bridge)

docker network create zk-kfk-net

然后执行 docker network ls 查看网络
在这里插入图片描述
运行容器的时候,指定 network
比如允许一个zookeeper容器

docker run -d -p 2181:2181 --restart=always --name=zookeeper --network=zk-kfk-net --network-alias=zookeeper.server zookeeper

说明:

  • –network my_net:指定容器的网络
  • –network-alias zookeeper.server:指定其它容器访问该容器时的网络别名

检查容器信息docker inspect zookeeper,查看网络部分信息
在这里插入图片描述
接下来运行另一个容器kafka

docker run -d -p 9092:9092 --restart=always --name=kafka --network=zk-kfk-net --network-alias=kafka.server -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=zookeeper.server:2181 -e ALLOW_PLAINTEXT_LISTENER=yes -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka.server:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 bitnami/kafka
  • KAFKA_ZOOKEEPER_CONNECT=zookeeper.server:2181 需要制定zookeeper的连接地址,可以发现能够正常启动
    然后我们在 eureka-server 容器中去测试,是否能 ping 通刚才的 mysql 容器
docker exec -u 0 -it kafka /bin/sh

然后进行ping
在这里插入图片描述

通过 --link 实现容器间的通信

容器之间还可以通过 --link 的方式来实现通信,不过这种方式在多个容器之间需要进行通信时,不免显得笨重,所以不推荐使用

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值