docker网络模式详解

1、网络模式

网络模式配置说明
bridge模式--net=bridge默认值,在Docker网桥docker0上为容器创建新的网络栈
none模式--net=none不配置网络,用户可以稍后进入容器,自行配置
container模式--net=container:name/id容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace
host模式--net=host容器和宿主机共享Network namespace
用户自定义--net=自定义网络用户自己使用network相关命令定义网络,创建容器的时候可以指定为自己定义的网络

2、docker每个都有一个ip地址

 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -d -P --name tomcat1 tomcat:8
 Unable to findimage 'tomcat:8'locally
 8: Pulling from library/tomcat
 90fe46dd8199: Pull complete 
 35a4f1977689: Pull complete 
 bbc37f14aded: Pull complete 
 74e27dc593d4: Pull complete 
 93a01fbfad7f: Pull complete 
 1478df405869: Pull complete 
 64f0dd11682b: Pull complete 
 68ff4e050d11: Pull complete 
 9a696f0d2c22: Pull complete 
 44fdefb02938: Pull complete 
 Digest: sha256:140ebee3a8ad23065abee46539900c69dc4d90a1ff4b41f2396e38968e05e82b
 Status: Downloaded newer image fortomcat:8
 cb2139eeaec4da409626b2192faf7d43bb3d326597d7b1fd6ca5d9385e14bc3a
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat1 ip addr
 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
 112: eth0@if113: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc noqueue state UP group default 
   link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
   inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
       valid_lft forever preferred_lft forever
       
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# ping 172.18.0.2
 PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
 64bytes from 172.18.0.2: icmp_seq=1ttl=64time=0.064 ms
 64bytes from 172.18.0.2: icmp_seq=2ttl=64time=0.066 ms
 64bytes from 172.18.0.2: icmp_seq=3ttl=64time=0.055 ms
 64bytes from 172.18.0.2: icmp_seq=4ttl=64time=0.056 ms

3、docker桥接网络

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

Linux虚拟网络技术

Docker容器网络就很好的利用了Linux虚拟网络技术,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair);

Docker中的网络接口默认都是虚拟的接口。虚拟接口的优势就是转发效率极高(因为Linux是在内核中进行数据的复制来实现虚拟接口之间的数据转发,无需通过外部的网络设备交换),对于本地系统和容器系统来说,虚拟接口跟一个正常的以太网卡相比并没有区别,只是他的速度快很多。

4、查看本机网络(本机有三个网络)

 # lo:127.0.0.1
 # eth0:172.17.119.96 阿里云私有ip;内网可以互通,访问不要流量,省流量。
 # docker0:172.18.0.1
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# ip add
 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP group default qlen 1000
   link/ether 00:16:3e:0a:07:ba brd ff:ff:ff:ff:ff:ff
   inet 172.17.119.96/20 brd 172.17.127.255 scope global dynamic eth0
       valid_lft 315025394sec preferred_lft 315025394sec
 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500qdisc noqueue state DOWN group default 
   link/ether 02:42:f1:f3:d2:be brd ff:ff:ff:ff:ff:ff
   inet 172.18.0.1/16 brd 172.18.255.255 scope global docker0
       valid_lft forever preferred_lft forever

5、网络的创建过程

Docker创建一个容器的时候,会具体执行以下操作:

  1. 创建一对虚拟接口,分别放到本地主机和新容器的命名空间中

  2. 本地主机一段的虚拟接口连接到默认的docker0网桥或者指定网桥上,并具有一个以veth开头的唯一名字

  3. 容器一段的虚拟接口将放到新创建的容器中,并修改名字为eth0。这个接口只在容器的命名空间可见

  4. 从网桥的可用地址段中获取一个空闲的地址分配给容器的eth0(如:172.18.0.1/16),并配置默认路由网关为docker0网卡的内部接口docker0的IP地址

完成以上,容器就可以使用它所能看到的eth0虚拟网卡来连接其他容器和访问外部网络。

6、默认在docker0网络下,docker容器之间不能相互访问

 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker ps
 CONTAINER ID       IMAGE               COMMAND             CREATED             STATUS             PORTS                     NAMES
 efe07891e348       tomcat:8            "catalina.sh run"  12minutes ago     Up 12minutes       0.0.0.0:32770->8080/tcp   tomcat2
 cb2139eeaec4       tomcat:8            "catalina.sh run"  24minutes ago     Up 24minutes       0.0.0.0:32768->8080/tcp   tomcat
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat ping tomcat2
 ping: tomcat2: Name or servicenot known

7、容器之间只能ping通自己

 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -d -P --hostname tomcat1 --name tomcat1 tomcat:8
 63821ec9194e540d2b162d64c05851b2216ffa0acd2c8de3da4e0427df7b6c9a
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -d -P --hostname tomcat2 --name tomcat2 tomcat:8
 74d3a2b65539e0b8e372da81b9c5ddd516ced07c948887ef6fc9f56da95f659d
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat1 ping tomcat2
 ping: tomcat2: Name or servicenot known
 
 # 自己ping自己可以
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat1 ping tomcat1
 PING tomcat1 (172.18.0.2) 56(84) bytes of data.
 64bytes from tomcat1 (172.18.0.2): icmp_seq=1ttl=64time=0.045 ms
 64bytes from tomcat1 (172.18.0.2): icmp_seq=2ttl=64time=0.048 ms

8、使用link

 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -P -d --name tomcat3 --link tomcat2 tomcat:8
 bb2f63e66d4ba7545c29c7957e79c5f31dc922ff8138b6a31ec5b663722c4927
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat3 ping tomcat2
 PING tomcat2 (172.18.0.3) 56(84) bytes of data.
 64bytes from tomcat2 (172.18.0.3): icmp_seq=1ttl=64time=0.087 ms
 64bytes from tomcat2 (172.18.0.3): icmp_seq=2ttl=64time=0.064 ms
 64bytes from tomcat2 (172.18.0.3): icmp_seq=3ttl=64time=0.060 ms
 
 # 只有tomcat3到tomcat2的方向是通的,反向ping不通
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat3 ping tomcat1
 ping: tomcat1: Name or servicenot known
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat2 ping tomcat3
 ping: tomcat3: Name or servicenot known

9、link原理是创建的时候他把ip绑定到了hosts

 # 原理是创建的时候他把ip绑定到了hosts
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat3 cat /etc/hosts
 127.0.0.1localhost
 ::1localhost ip6-localhost ip6-loopback
 fe00::0ip6-localnet
 ff00::0ip6-mcastprefix
 ff02::1ip6-allnodes
 ff02::2ip6-allrouters
 172.18.0.3tomcat2 tomcat2 #自动绑定hosts
 172.18.0.4bb2f63e66d4b

10、link的缺点(重新建创建docker容器之后,无法相互访问,强制把link文件删除)

 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker stop tomcat2
 tomcat2
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker rm tomcat2
 tomcat2
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -d -P --hostname tomcat2 --name tomcat2 tomcat:8
 95e728be43e6ea2abe5d8a4df2c6f830ce880e7ba08b8e232597e12500f5a23c
 
 # tomcat3由于之前把tomcat2绑定了hosts,tomcat2销毁之后重启建立的,导致tomcat3系统直接崩溃了。
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat3 ping tomcat2
 Error response from daemon: Cannot link to a non running container: /tomcat2 AS /tomcat3/tomcat2
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat3 cat /etc/hosts
 Error response from daemon: Cannot link to a non running container: /tomcat2 AS /tomcat3/tomcat2
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker restart tomcat3
 Error response from daemon: Cannot restartcontainer tomcat3: Cannot link to a non running container: /tomcat2 AS /tomcat3/tomcat2

11、docker容器可以支持的ip数量

 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker network ls
 NETWORK ID         NAME               DRIVER             SCOPE
 f92c1c2c4bf7       bridge             bridge             local
 e6983a928f90       host               host               local
 21e45a3c002b       none               null               local
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker network inspect f92c1c2c4bf7 
 [
   {
        "Name": "bridge",
        "Id": "f92c1c2c4bf7f5b909637cded1301a513ac650f8eb5841504ed7619d7a0d5e66",
        "Created": "2020-05-01T16:34:11.962547179+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
               {
                    "Subnet": "172.18.0.0/16", #默认情况下可以开启六万多个ip
                    "Gateway": "172.18.0.1"
               }
           ]
       }

12、清空所有容器

 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker rm -f $(docker ps -aq)
 95e728be43e6
 bb2f63e66d4b
 63821ec9194e
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker ps
 CONTAINER ID       IMAGE               COMMAND             CREATED             STATUS             PORTS               NAMES
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# ip add
 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP group default qlen 1000
   link/ether 00:16:3e:0a:07:ba brd ff:ff:ff:ff:ff:ff
   inet 172.17.119.96/20 brd 172.17.127.255 scope global dynamic eth0
       valid_lft 315020766sec preferred_lft 315020766sec
 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500qdisc noqueue state DOWN group default 
   link/ether 02:42:f1:f3:d2:be brd ff:ff:ff:ff:ff:ff
   inet 172.18.0.1/16 brd 172.18.255.255 scope global docker0
       valid_lft forever preferred_lft forever

13、自定义网络命令详解

 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker network create --help
 
 Usage:docker network create [OPTIONS] NETWORK
 
 Create a network
 
 Options:
      --attachable          Enable manual container attachment
      --aux-addressmap     Auxiliary IPv4 or IPv6 addresses used by
                             Network driver (default map[])
      --config-fromstring   The network from which copying the configuration
      --config-only        Create a configuration only network
  -d, --driverstring       Driver to manage the Network (default "bridge")
      --gatewaystrings     IPv4 or IPv6 Gateway forthe master subnet
      --ingress            Create swarm routing-mesh network
      --internal            Restrict external access to the network
      --ip-rangestrings     Allocate container ip from a sub-range
      --ipam-driverstring   IP Address Management Driver (default "default")
      --ipam-optmap         Set IPAM driver specific options (default map[])
      --ipv6                Enable IPv6 networking
      --labellist           Set metadata on a network
  -o, --optmap             Set driver specific options (default map[])
      --scopestring         Control the network's scope
      --subnetstrings       Subnet inCIDR format that represents a
                             network segment

14、bridge模式网络

Docker守护进程创建了一个虚拟以太网桥docker0,附加在其上的任何网卡之间都能自动转发数据包。默认情况下,守护进程会创建一对对等接口,将其中一个接口设置为容器的eth0接口,另一个接口放置在宿主机的命名空间中,从而将宿主机上的所有容器都连接到这个内部网络上。同时,守护进程还会从网桥的私有地址空间中分配一个IP地址和子网给该容器。

 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -d -P --net=bridge --hostname tomcat2 --name tomcat2 tomcat:8
 27f3deb11ce1c4c2103c91a29799247bd5dbce9a1aceea4787cd826ee32bfe59
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker ps
 CONTAINER ID       IMAGE               COMMAND             CREATED             STATUS             PORTS                     NAMES
 27f3deb11ce1       tomcat:8            "catalina.sh run"  29seconds ago     Up 28seconds       0.0.0.0:32780->8080/tcp   tomcat2
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat2 ping tomcat4
 ping: tomcat4: Name or servicenot known

15、host模式

该模式将禁用Docker容器的网络隔离。因为容器共享了宿主机的网络命名空间,容器和宿主机具有相同的IP地址172.17.119.96直接暴露在公共网络中。因此,你需要通过端口映射(port mapping)来进行协调。该模式比bridge模式更快(因为没有路由开销),但是它将容器直接暴露在公共网络中,是有安全隐患的。

 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -d -P --name tomcat3 --net host tomcat:8
 d4e9d230278c9a32b19069f0f63ce66766cf5943bc7c6121c148965177b3bfbe
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat3 ip add
 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP group default qlen 1000
   link/ether 00:16:3e:0a:07:ba brd ff:ff:ff:ff:ff:ff
   inet 172.17.119.96/20 brd 172.17.127.255 scope global dynamic eth0
       valid_lft 315019616sec preferred_lft 315019616sec
 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc noqueue state UP group default 
   link/ether 02:42:f1:f3:d2:be brd ff:ff:ff:ff:ff:ff
   inet 172.18.0.1/16 brd 172.18.255.255 scope global docker0
       valid_lft forever preferred_lft forever
 129: vethcc0922d@if128: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc noqueue master docker0 state UP group default 
   link/ether a2:45:72:a8:0d:84 brd ff:ff:ff:ff:ff:ff link-netnsid 0

16、container模式(一般缓存使用,在同一台机器访问比较快)

在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。

 # 相当于和tomcat1公用同一个ip同一个端口,导致端口冲突
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -d -P --net container:tomcat1 --name tomcat2 tomcat:8
 docker: Error response from daemon: conflicting options: port publishing and the container type network mode.
 See 'docker run --help'.

17、自定义桥接网络

自定义网络默认使用的是桥接网络“bridge”

1.创建桥接网络
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
 e99e400ffce3e42db45ecf4bf84baf97b726067d157445b24c630b5ad7689477
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker network ls
 NETWORK ID         NAME               DRIVER             SCOPE
 f92c1c2c4bf7       bridge             bridge             local
 e6983a928f90       host               host               local
 e99e400ffce3       mynet               bridge             local
 21e45a3c002b       none               null               local
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker network inspect mynet
 [
   {
        "Name": "mynet",
        "Id": "e99e400ffce3e42db45ecf4bf84baf97b726067d157445b24c630b5ad7689477",
        "Created": "2020-05-03T15:31:32.617833011+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
               {
                    "Subnet": "192.168.0.0/16",
                    "Gateway": "192.168.0.1"
               }
           ]
       },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
       },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
   }
 ]
2.创建容器
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -d -P --name tomcat-net-01 --net mynet tomcat:8
 5490bfc5d4b92a8e816670d51604bc79292c9ed4a3c25218031370dd4f85a674
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -d -P --name tomcat-net-02 --net mynet tomcat:8
 eb1b6b71c87e344c2d11c872d8374d74b4e3fa5129c7fade1a1bfb0ef8dc29ce
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker ps
 CONTAINER ID       IMAGE               COMMAND             CREATED             STATUS             PORTS                     NAMES
 eb1b6b71c87e       tomcat:8            "catalina.sh run"  7seconds ago       Up 5seconds        0.0.0.0:32778->8080/tcp   tomcat-net-02
 5490bfc5d4b9       tomcat:8            "catalina.sh run"  19seconds ago     Up 18seconds       0.0.0.0:32777->8080/tcp   tomcat-net-01
3.自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat-net-02 ip add
 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
 133: eth0@if134: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc noqueue state UP group default 
   link/ether 02:42:c0:a8:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
   inet 192.168.0.3/16 brd 192.168.255.255 scope global eth0
       valid_lft forever preferred_lft forever
       
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat-net-01 ping 192.168.0.3
 PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
 64bytes from 192.168.0.3: icmp_seq=1ttl=64time=0.105 ms
 64bytes from 192.168.0.3: icmp_seq=2ttl=64time=0.065 ms
 64bytes from 192.168.0.3: icmp_seq=3ttl=64time=0.064 ms
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat-net-01 ping tomcat-net-02
 PING tomcat-net-02 (192.168.0.3) 56(84) bytes of data.
 64bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=1ttl=64time=0.037 ms
 64bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=2ttl=64time=0.062 ms
 64bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=3ttl=64time=0.062 ms
4.指定ip
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -d -P --name tomcat-net-04 --ip 192.168.0.77 --net mynet tomcat:8
 9be39c53162c188753c7986fc17e9792d3bf709f458be63e3d626e488e6cf6ea
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat-net-01 ping 192.168.0.77
 PING 192.168.0.77 (192.168.0.77) 56(84) bytes of data.
 64bytes from 192.168.0.77: icmp_seq=1ttl=64time=0.089 ms
 64bytes from 192.168.0.77: icmp_seq=2ttl=64time=0.061 ms

18、打通mynet-docker0

1.不在同一网段,服务无法访问

 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker ps
 CONTAINER ID       IMAGE               COMMAND             CREATED             STATUS             PORTS                     NAMES
 9be39c53162c       tomcat:8            "catalina.sh run"  17minutes ago     Up 17minutes       0.0.0.0:32779->8080/tcp   tomcat-net-04
 eb1b6b71c87e       tomcat:8            "catalina.sh run"  27minutes ago     Up 27minutes       0.0.0.0:32778->8080/tcp   tomcat-net-02
 5490bfc5d4b9       tomcat:8            "catalina.sh run"  27minutes ago     Up 27minutes       0.0.0.0:32777->8080/tcp   tomcat-net-01
 d4e9d230278c       tomcat:8            "catalina.sh run"  35minutes ago     Up 35minutes                                 tomcat3
 cab9a4c1556a       tomcat:8            "catalina.sh run"  45minutes ago     Up 45minutes       0.0.0.0:32776->8080/tcp   tomcat1
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat-net-01 ping tomcat3
 ping: tomcat3: Name or servicenot known
2.将服务加入新建网络

 # 将tomcat1添加到自己的新建的网络里面
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker network connect mynet tomcat1
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker network inspect mynet
            "cab9a4c1556a7c5c4f91b71aa971aac47bedd8b8fadedfaafd13e3d41a8af994": {
                "Name": "tomcat1",
                "EndpointID": "1bf906eb112fd901e621c0a6077250ecde78a398b6babeded03ca2c05bcf0916",
                "MacAddress": "02:42:c0:a8:00:04",
                "IPv4Address": "192.168.0.4/16", # 多了一条地址
                "IPv6Address": ""
           },
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat1 ip add
 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
 128: eth0@if129: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc noqueue state UP group default 
   link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
   inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
       valid_lft forever preferred_lft forever
 137: eth1@if138: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc noqueue state UP group default # 新加了一块网卡
   link/ether 02:42:c0:a8:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
   inet 192.168.0.4/16 brd 192.168.255.255 scope global eth1
       valid_lft forever preferred_lft forever
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat-net-01 ping tomcat1
 PING tomcat1 (192.168.0.4) 56(84) bytes of data.
 64bytes from tomcat1.mynet (192.168.0.4): icmp_seq=1ttl=64time=0.082 ms
3.将服务退出新建网络
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker network disconnect mynet tomcat1
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it tomcat-net-01 ping tomcat1
 ping: tomcat1: Name or servicenot known

如果文章有任何错误欢迎不吝赐教,其次大家有任何关于运维的疑难杂问,也欢迎和大家一起交流讨论。关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。群主还经营一家Orchis饰品店,喜欢的小伙伴欢迎????前来下单。

扫描二维码

获取更多精彩

运维猫公众号

有需要技术交流的小伙伴可以加我微信,期待与大家共同成长,本人微信:

扫描二维码

添加私人微信

运维猫博主

扫码加微信

最近有一些星友咨询我知识星球的事,我也想继续在星球上发布更优质的内容供大家学习和探讨。运维猫公众号平台致力于为大家提供免费的学习资源,知识星球主要致力于即将入坑或者已经入坑的运维行业的小伙伴。

点击阅读原文  查看更多精彩内容!!!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值