容器互联
docker0问题:不支持容器名互相连接访问!
查看所有的docker网络
docker network ls
网络模式
bridge:桥接docker默认,自定义的网络也使用bridge模式。
none:不配置网络。
host:和宿主机共享网络。
container:容器内网络连通!用的少!局限很大!
docker network帮助信息
[root@localhost ~]# docker network --help
Usage: docker network COMMAND
Manage networks
Commands:
connect Connect a container to a network
create Create a network
disconnect Disconnect a container from a network
inspect Display detailed information on one or more networks
ls List networks
prune Remove all unused networks
rm Remove one or more networks
测试自定义网络
删除所有容器,保证干净环境。
docker rm -f $(docker ps -a -q)
回到最初的3个网卡
之前直接启动的的命令
docker run -d -P --name tomcat01 tomcat
#直接启动的容器默认是docker0网络,其实默认省略了--net bridge参数
docker0特点,默认域名不能访问,--link需要互相打通才能相互通信,不建议使用。
自定义网络
再查看docker network create --help帮助信息
docker network create --help
创建一个自定义网络
--driver bridge #默认为桥接,可不写
--subnet 192.168.0.0/16 #子网
--gateway 192.168.0.1 #路由
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 nettest
查看创建的网络
docker network ls
查看创建网络的详细信息
docker network inspect nettest
到此自己的网络就创建好了。
容器走自定义网络
测试启动2个容器
docker run -d -P --name tomcat-net-01 --net nettest tomcat
docker run -d -P --name tomcat-net-02 --net nettest tomcat
再次查看自定义网络的详细信息
docker network inspect nettest
此时自定义网络下面就有了我们的容器信息。
测试域名ping
docker exec -it tomcat-net-01 ping 192.168.0.3
docker exec -it tomcat-net-01 ping tomcat-net-02
此时用容器的名称可以互相Ping通了。
自定义的网络修复了docker0的缺陷。
网络间通信
网络联通,使2张网下的容器也可以互相通信。
启动2个容器,不指定网络。测试2个网络下是否可以互通。
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat02 tomcat
#测试
docker exec -it tomcat01 ping tomcat-net-01
如何打通docker0和自定义的网络?
网络之间如何互相打通?
连接1个容器到1个网络
docker network --help
查看帮助信息
docker network connect --help
测试打通,查看详细信息
docker network connect nettest tomcat01
查看详细信息,连通后发生了什么?
docker network inspect nettest
连通之后就将tomcat01放到了nettest网络下?
测试通信
官方:1个容器2个IP
方法:容器和网络打通解决2张网络下容器通信。
测试tomcat02
tomcat02与自定义网络nettest没有打通,所以无法ping通。
结论:假设要跨网络通信,就需要使用docker network connect打通!