容器互联

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打通!

原文地址:https://www.cnblogs.com/lwenwu/p/14047247.html