docker容器网络通信

容器间网络通信的难点

  • 创建容器时,容器的ip 可能不在一个网段,导致无法通信。
    尤其是通过docker-compose和docker命令创建启动容器时

  • 使用 bridge 网络模式,当容器重启时,会按照顺序获取对应的IP地址,容器的IP地址可能会改变

  • 服务之间通过ip访问,比较繁琐,需要查看各个容器的ip

  • 使用 host 网络模式,使用宿主机的ip,没有上面问题,但绑定同一个端口的容器,只能启动一个,再启动就需要先改端口,比较繁琐

  • 创建容器时,加上参数link,连接要通信的容器。不推荐

解决方法

创建 自定义网络,创建容器时使用该网络,容器启动后,可通过 容器名 通信

如果不想用容器名通信,创建容器时使用该网络,并指定 网络别名,可通过 网络别名 通信

自定义网络

创建bridge网络

docker network create mynetwork

ip网段由docker自行分配

创建bridge网络,指定ip段

docker network create --subnet=172.19.0.0/16 mynetwork

网络名、ip网段不能相同

查看网络信息

docker network inspect mynetwork
查看宿主机网络信息
ip a

可以查看到虚拟网卡

虚拟网卡 br-7e8631318f31,与 docker网络 是一致的

查看docker安装的网络

docker network ls

删除网络

docker network rm 网络名

创建容器(docker run)

指定网络

docker run -d --name tomcat1  --net mynetwork tomcat
docker run -d --name tomcat2  --net mynetwork tomcat
测试 通过容器名通信
docker exec -it tomcat1 ping tomcat2

指定网络、指定ip

docker run -d --name tomcat1  --net mynetwork --ip 172.19.0.100 tomcat
docker run -d --name tomcat2  --net mynetwork --ip 172.19.0.101 tomcat
测试 通过容器名通信
docker exec -it tomcat1 ping tomcat2

指定网络、指定网络别名

docker run -d --name tomcat1  --net mynetwork --network-alias t1 tomcat
docker run -d --name tomcat2  --net mynetwork --network-alias t2 tomcat
测试 通过容器名通信
docker exec -it tomcat1 ping t2

创建容器(docker-compose)

docker-compose network 网络


原文出处:/show_1EF5xlsxdwTZ.html