docker容器之间进行网络通信

原文参考如下

Docker网络模式 https://www.cnblogs.com/zuxing/articles/8780661.html

Docker Network基础 https://www.cnblogs.com/jsonhc/p/7823286.html

 

一、默认网络

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

docker network ls

内容如下:

 docker 运行新建容器的时候,默认使用 bridge 模式,

如果想更改,可以在 run 的时候,加上参数 --network <name>

 

二、Bridge模式

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

 

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

创建网络

创建一个网络名为 my_net 且 driver 为 bridge 的网络:(默认创建的就是bridge)

docker network create my_net

然后执行 docker network ls 查看网络

 

运行容器的时候,指定 network

例:运行一个 mysql 容器:

docker run -d --name mysql -p 3306:3306 --network my_net --network-alias mysql mysql:5.7.30

说明:

  --network my_net:指定容器的网络

  --network-alias mysql:指定其它容器访问该容器时的网络别名

 

接下来,运行另一个容器:

docker run -d --name eureka-server -p 8761:8761 --network my_net --network-alias eureka-server eureka-server:1.0.0

然后我们在 eureka-server 容器中去测试,是否能 ping 通刚才的 mysql 容器,执行:

docker exec -it eureka-server ping mysql

结果如下:

 由此可见,容器之间已经能进行互相访问了

 

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

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

posted @ 2020-09-27 17:21  lkc9  阅读(329)  评论(1编辑  收藏  举报