【Docker】网络
创建容器默认使用docker0网络,我们创建一个自定义网络
docker0的特点是容器之间只能通过ip访问,不能通过容器名访问,除非使用--link。自定义网络可以通过容器名访问
单向通信
--link
网络模式
- bridge:使用桥接方式连接网络(默认)
- none:不配置网络
- host:和主机共享网络
- container:容器内联通(用得少,局限大)
当我们启动容器时,如果不指定网络,默认使用bridge,也就是docker0
docker run -id busybox
相当于:
docker run -id --net bridge busybox
查看docker网络相关命令:
网络命令
列出网络相关命令
docker network --help
列出所有网络
docker network ls
创建网络:
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet # 创建名为mynet的网络,使用桥接模式,子网掩码是192.168.0.0/16,网关是192.168.0.1
移除网络:
docker network rm 网络名
查看网络详细信息:
docker network inspect mynet
案例
创建使用mynet的容器busy1-mynet、busy2-mynet
docker run -id --name busy1-mynet --net mynet --rm busybox
docker run -id --name busy2-mynet --net mynet --rm busybox
创建使用默认网络docker0的容器busy1、busy2
docker run -id --name busy1 --rm busybox
docker run -id --name busy2 --rm busybox
busy1-mynet和busy2-mynet之间可以通过容器名互相ping通:
docker exec -it busy1-mynet ping busy2-mynet
--rm
:表示退出容器后自动删除容器
网络连通:连接一个容器到一个网络
但是busy1-mynet和busy1不能通过ip、容器名ping通,因为他们的网段不同。此时需要用connect命令,连接一个容器到一个网络
docker network connect mynet busy1 #将容器busy1连接到网络mynet上。busy1容器此时会有两个IP
#此时mynet网络中的容器就可以连接busy1容器了
docker exec -it busy1-mynet1 ping busy1