用docker默認的網絡 docker0 創建的容器,容器之間只能使用容器 ip 相互ping得通,使用容器名字ping不通。
使用docker自定義的網絡創建的容器,各容器之間既可以通過 ip 相互ping得通,也可以使用容器名相互ping得通。
【1】創建自定義網絡mynet
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
參數說明:
--driver bridge #表示橋接模式
--subnet 192.168.0.0/16 #16表示最多支持65535個ip,可以分配192.168.0.2到192.168.255.255,如果沒有指定--subnet參數默認網段為172.17.0.0/16,默認網關為172.17.0.1;
--subnet 192.168.0.0/24 #24表示最多支持254個ip,可以分配192.168..0.2到192.168.0.255
--gateway #表示docker容器的網關
mynet表示網絡名
查看自定義網絡mynet的信息:

【2】創建容器
創建3個tomcat容器到默認網絡(docker0)
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat02 tomcat
docker run -d -P --name tomcat03 tomcat
創建3個tomcat容器到自定義網絡(mynet)
docker run -d -P --name my-tomcat01 --net mynet tomcat
docker run -d -P --name my-tomcat02 --net mynet tomcat
docker run -d -P --name my-tomcat03 --net mynet tomcat
查看默認網絡 docker0 的信息
docker network inspect bridge

查看自定義網絡 myne 的信息:
docker network inspect mynet

【3】測試ping容器名以及ip地址
分別用my-demo01容器ping my-demo02容器的ip及容器名,看是否ping得通。
docker exec -it my-demo01 ping 192.168.0.3 docker exec -it my-demo01 ping my-demo02
使用ping命令如果報下面的錯誤:
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "ping": executable file not found in $PATH: unknown
這是因為容器只有基礎命令,沒有網絡命令導致,就先進入容器並且安裝網絡工具:
docker exec -it my-tomcat01 /bin/bash
apt update && apt install -y iproute2 && apt install -y net-tools && apt install -y iputils-ping

看圖信息,說明my--tomcat01無論是ping my-tomcat02的ip還是容器名都可以通。
【4】將不同網段的容器互通
首先,mynet 網絡還未跟 tomcat01 容器連通,我們用mynet中的容器 my-tomcat01來ping一下docker0網絡中的 tomcat01 容器試試:
docker exec -it my-tomcat01 ping tomcat01
會出現 ping: tomcat01: Name or service not known 錯誤。

然后,將自定義網絡 mynet 跟默認網絡 docker0 中的某個容器(比如:tomcat01)連通。
docker network connect mynet tomcat01

查看一下mynet網格信息:
docker network inspect mynet

此時,tomcat01容器加入到mynet網絡中來了。再來 ping 一下加進來的容器:
docker exec -it my-tomcat01 ping tomcat01

這次ping通了。
