docker0问题:不支持容器名互相连接访问!

查看所有的docker网络

  1. docker network ls

image.png

网络模式

bridge:桥接docker默认,自定义的网络也使用bridge模式。

none:不配置网络。

host:和宿主机共享网络。

container:容器内网络连通!用的少!局限很大!

docker network帮助信息

  1. [root@localhost ~]# docker network --help
  2. Usage: docker network COMMAND
  3. Manage networks
  4. Commands:
  5. connect Connect a container to a network
  6. create Create a network
  7. disconnect Disconnect a container from a network
  8. inspect Display detailed information on one or more networks
  9. ls List networks
  10. prune Remove all unused networks
  11. rm Remove one or more networks

image.png

测试自定义网络

删除所有容器,保证干净环境。

docker rm -f $(docker ps -a -q)

image.png
回到最初的3个网卡
image.png
之前直接启动的的命令

docker run -d -P --name tomcat01 tomcat
#直接启动的容器默认是docker0网络,其实默认省略了--net bridge参数

docker0特点,默认域名不能访问,—link需要互相打通才能相互通信,不建议使用。

自定义网络

image.png
再查看docker network create —help帮助信息

docker network create --help

image.png
创建一个自定义网络

—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

image.png
查看创建的网络

docker network ls

image.png
查看创建网络的详细信息

docker network inspect nettest

image.png
到此自己的网络就创建好了。

容器走自定义网络

测试启动2个容器

docker run -d -P --name tomcat-net-01 --net nettest tomcat
docker run -d -P --name tomcat-net-02 --net nettest tomcat

image.png
再次查看自定义网络的详细信息

docker network inspect nettest

image.png
此时自定义网络下面就有了我们的容器信息。

测试域名ping

docker exec -it tomcat-net-01 ping 192.168.0.3
docker exec -it tomcat-net-01 ping tomcat-net-02

image.pngimage.png
此时用容器的名称可以互相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

image.png
如何打通docker0和自定义的网络?

网络之间如何互相打通?

连接1个容器到1个网络

docker network --help

image.png
查看帮助信息

docker network connect --help

image.png
测试打通,查看详细信息

docker network connect nettest tomcat01

image.png
查看详细信息,连通后发生了什么?

docker network inspect nettest

image.png
连通之后就将tomcat01放到了nettest网络下?

测试通信
image.png
官方:1个容器2个IP

方法:容器和网络打通解决2张网络下容器通信。

测试tomcat02

tomcat02与自定义网络nettest没有打通,所以无法ping通。
image.png
结论:假设要跨网络通信,就需要使用docker network connect打通!