Docker网络笔记

Docker 网络

理解Docker0

测试

在这里插入图片描述

三个网络

# 问题: docker 是如何处理容器网络访问的?

注:那个容器的ID(ca5d44e0a844)是我创建的centos的容器的ID

在这里插入图片描述

[root@iZuf61n8ywv9zx27oeoajoZ /]# docker run -it centos /bin/bash
[root@ca5d44e0a844 /]# [root@iZuf61n8ywv9zx27oeoajoZ /]   #这里按了 Ctrl + P + Q

#查看容器的内部网络地址 ip addr , 发现容器启动的时候会得到一个 eth0@if2176  ip地址 , docker分配的
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker exec -it ca5d44e0a844 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc 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
2175: eth0@if2176: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
       
#思考:linux能不能 ping 通容器内部!
[root@iZuf61n8ywv9zx27oeoajoZ /]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.039 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.042 ms
64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.042 ms

#linux 可以ping 通 docker 容器内部

原理

  1. 我们每安装一个docker容器, docker就会给docker容器分配一个ip, 我们只要安装了docker, 就会有一个网卡 docker0

    桥接模式, 使用的技术是 evth-pair技术

    再次测试 ip addr

    [root@iZuf61n8ywv9zx27oeoajoZ /]# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc 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 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:16:3e:16:93:3d brd ff:ff:ff:ff:ff:ff
        inet 172.19.14.174/20 brd 172.19.15.255 scope global dynamic eth0
           valid_lft 315301052sec preferred_lft 315301052sec
    3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:64:79:d4:89 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
           valid_lft forever preferred_lft forever
    6: br-a8b173597bb8: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
        link/ether 02:42:c3:7c:be:ea brd ff:ff:ff:ff:ff:ff
        inet 172.18.0.1/16 brd 172.18.255.255 scope global br-a8b173597bb8
           valid_lft forever preferred_lft forever
    2176: veth9a1d701@if2175: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
        link/ether 16:85:4a:83:39:57 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    # 可以看到 启动一个容器后, 再次测试, 又多了一个地址(并且紧接着容器的序号2175)
    
  2. 再启动一个容器测试 , 发现又多了一对网卡~

    注意:我们前台没有进程,所以采用 下面第一行的方式(在上面一个小坑里有讲)

[root@iZuf61n8ywv9zx27oeoajoZ /]# docker run -dit --name centos03 centos /bin/bash 
b65544cf33c7be0495fe10c104ee21f8c8dfb96148bd89811aff2d0f49e58e98
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b65544cf33c7        centos              "/bin/bash"         4 seconds ago       Up 3 seconds                            centos03
ca5d44e0a844        centos              "/bin/bash"         2 hours ago         Up 2 hours                              angry_albattani
[root@iZuf61n8ywv9zx27oeoajoZ /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc 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 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:16:3e:16:93:3d brd ff:ff:ff:ff:ff:ff
    inet 172.19.14.174/20 brd 172.19.15.255 scope global dynamic eth0
       valid_lft 315295582sec preferred_lft 315295582sec
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:64:79:d4:89 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
6: br-a8b173597bb8: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:c3:7c:be:ea brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-a8b173597bb8
       valid_lft forever preferred_lft forever
2176: veth9a1d701@if2175: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 16:85:4a:83:39:57 brd ff:ff:ff:ff:ff:ff link-netnsid 0
2184: vethba9afa3@if2183: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 52:a3:09:4b:af:a3 brd ff:ff:ff:ff:ff:ff link-netnsid 1
# 可以发现, 当我又启动一个容器之后,发现又多了一对网卡  2184: vethba9afa3@if2183
#我们发现这个容器带来网卡, 都是一对对的
#evth-pair 就是一对的虚拟设备接口, 它们都是成对出现的, 一段接着协议, 一段彼此连接
#正因为有了这个特性, evth-pair 充当一个桥梁, 连接各种虚拟网络设备的
#OpenStac, Docker容器之间的连接, ovs的连接,都是使用 evth-pair技术
  1. 我们在测试一下 centos03 和 angry_albattani(第一个创建的centos容器,忘记起名了) 是否可以 ping 通

    注:172.17.0.3就是 centos03 的地址

[root@iZuf61n8ywv9zx27oeoajoZ /]# docker exec -it angry_albattani ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.050 ms
64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.052 ms

# 结论: 容器和容器之间是可以互相 ping 通的 !

网络模型图

在这里插入图片描述

结论

  1. tomcat01 和 tomcat02 是公用的一个路由器 , docker0
  2. 所有的容器不指定网络的情况下, 都是docker0 路由的, docker 会给我们的容器分配一个默认的可用ip
  3. 再来个图
    在这里插入图片描述

Docker中所有的网络接口都是虚拟的。 虚拟的转发效率高!(内网传递文件!)

在这里插入图片描述

(注: 由上图还可以知道bridge 是 默认的)

只要容器删除, 对应的网桥就没了

[root@iZuf61n8ywv9zx27oeoajoZ /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b65544cf33c7        centos              "/bin/bash"         29 minutes ago      Up 29 minutes                           centos03
ca5d44e0a844        centos              "/bin/bash"         2 hours ago         Up 2 hours                              angry_albattani
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker stop ca5d44e0a844
ca5d44e0a844
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b65544cf33c7        centos              "/bin/bash"         29 minutes ago      Up 29 minutes                           centos03
[root@iZuf61n8ywv9zx27oeoajoZ /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc 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 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:16:3e:16:93:3d brd ff:ff:ff:ff:ff:ff
    inet 172.19.14.174/20 brd 172.19.15.255 scope global dynamic eth0
       valid_lft 315293800sec preferred_lft 315293800sec
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:64:79:d4:89 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
6: br-a8b173597bb8: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:c3:7c:be:ea brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-a8b173597bb8
       valid_lft forever preferred_lft forever
2184: vethba9afa3@if2183: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 52:a3:09:4b:af:a3 brd ff:ff:ff:ff:ff:ff link-netnsid 1
# 我们可以发现, 一开始的centos镜像的那对网卡  2176: veth9a1d701@if2175: 没了

–link

思考一个场景, 我们编写了一个微服务, database url=ip:,项目不重启, 数据库ip换掉了, 我么希望可以处理这个问题,可以用名字来进行访问容器?

[root@iZuf61n8ywv9zx27oeoajoZ /]# docker run -dit --name centos04 centos /bin/bash 
43d1f86349ce46b03a091761fd6ff4a97b192e7b642c6463173f3f7316616337
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
43d1f86349ce        centos              "/bin/bash"         6 seconds ago       Up 5 seconds                            centos04
b65544cf33c7        centos              "/bin/bash"         38 minutes ago      Up 38 minutes                           centos03
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker exec -it centos03 ping centos04
ping: centos04: Name or service not known
# 我们可以发现, 直接用容器名 ping 另一个容器是行不通的
#如何解决呢?
#通过 --link 即可以解决网络连通问题
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker run -dit --name centos05 --link centos04 centos /bin/bash
1260d728cb24544185c37b0eb60bae4f4d662ffb21cbb1174a763bc518e29d92
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker exec -it centos05 ping centos04
PING centos04 (172.17.0.2) 56(84) bytes of data.
64 bytes from centos04 (172.17.0.2): icmp_seq=1 ttl=64 time=0.083 ms
64 bytes from centos04 (172.17.0.2): icmp_seq=2 ttl=64 time=0.060 ms
64 bytes from centos04 (172.17.0.2): icmp_seq=3 ttl=64 time=0.056 ms
^C
--- centos04 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.056/0.066/0.083/0.013 ms

#反向可以ping通吗?
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker exec -it centos04 ping centos05
ping: centos05: Name or service not known
# 显然不可以, 因为 04没有配置

探究(inspect)

[root@iZuf61n8ywv9zx27oeoajoZ /]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
7059ad9236ba        bridge              bridge              local
96c9192b5221        host                host                local
8756c5d558ef        none                null                local
a8b173597bb8        test_default        bridge              local
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker inspect 7059ad9236ba
[
    {
        "Name": "bridge",
        "Id": "7059ad9236bad2eee836e13703a8f05325ed6b5e5cdbe112f1481014efc3cf5b",
        "Created": "2020-10-14T19:30:30.253219699+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {  # 这里面是docker为我们的容器创建的ip
            "1260d728cb24544185c37b0eb60bae4f4d662ffb21cbb1174a763bc518e29d92": {
                "Name": "centos05",
                "EndpointID": "180cd2dc4850406edbd3291bdcbdfddd23bfc50bbc8f1c8b4fd3388c3f27d6d3",
                "MacAddress": "02:42:ac:11:00:04",
                "IPv4Address": "172.17.0.4/16",
                "IPv6Address": ""
            },
            "43d1f86349ce46b03a091761fd6ff4a97b192e7b642c6463173f3f7316616337": {
                "Name": "centos04",
                "EndpointID": "804900ff82149ea805e5e337b729a673542e35288bd804bad9688ee9ab5e13d4",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "b65544cf33c7be0495fe10c104ee21f8c8dfb96148bd89811aff2d0f49e58e98": {
                "Name": "centos03",
                "EndpointID": "f5ad654d67967d5282920f342072c55aeaa378de9b4b3634dc8ce88c10cc53bc",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

link的原理

其实这个centos05 就是在本地配置了centos04的配置?

#查看 hosts 配置,在这里发现了!
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker exec -it centos05 cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	centos04 43d1f86349ce  ####
172.17.0.4	1260d728cb24

# 所以说, --link就是在我们在hosts配置中增加了一个172.17.0.2 centos04 43d1f86349ce

但是,现在docker已经不建议使用 --link了!

我们现在用

自定义网络! 不适用docker0

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

自定义网络

容器互联(–link 和 自定义网络)

#查看所有的docker网络
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
7059ad9236ba        bridge              bridge              local
96c9192b5221        host                host                local
8756c5d558ef        none                null                local
a8b173597bb8        test_default        bridge              local

网络模式

bridge:桥接docker(默认,自己创建也使用这个模式)

none:不配置网络

host:和宿主机共享网络

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

测试

#我们直接启动的命令 --net bridge,而这个就是我们的docker0
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat

#docker0特点, 默认,域名不能访问, --link可以打通连接!

#我们可以自定义一个网络!
#--driver bridge
#--subnet 192.168.0.0/16
#--gateway 192.168.0.1
#	mynet是网络名字
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
f706d88435d522786ea60d5777241e31b2daefc4c458ce0d49d18c2741407a51
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
7059ad9236ba        bridge              bridge              local
96c9192b5221        host                host                local
f706d88435d5        mynet               bridge              local
8756c5d558ef        none                null                local
a8b173597bb8        test_default        bridge              local
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker inspect mynet
[
    {
        "Name": "mynet",
        "Id": "f706d88435d522786ea60d5777241e31b2daefc4c458ce0d49d18c2741407a51",
        "Created": "2020-10-15T14:35:54.0864644+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": {}
    }
]

再次测试(用mynet)

[root@iZuf61n8ywv9zx27oeoajoZ /]# docker run -dit --name centos-net-01 --net mynet centos /bin/bash
d89d299fd40b33457a8530a90b9d4c673ad30c984ad1b1abe18d97919a6bd243
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker run -dit --name centos-net-02 --net mynet centos /bin/bash
4f7674333b67301b03e32578f1d205fa43f096d83d2a51205b4942f5b5740ebc
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "f706d88435d522786ea60d5777241e31b2daefc4c458ce0d49d18c2741407a51",
        "Created": "2020-10-15T14:35:54.0864644+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": {    # 我们自己创建的网络下有刚刚创建的两个容器ip
            "4f7674333b67301b03e32578f1d205fa43f096d83d2a51205b4942f5b5740ebc": {
                "Name": "centos-net-02",
                "EndpointID": "a4460f7d21cfd606eaaf299c22cf18e38e30b788f9d7bad1927187e5b3899274",
                "MacAddress": "02:42:c0:a8:00:03",
                "IPv4Address": "192.168.0.3/16",# 并且ip范围在我们设置的区间里
                "IPv6Address": ""
            },
            "d89d299fd40b33457a8530a90b9d4c673ad30c984ad1b1abe18d97919a6bd243": {
                "Name": "centos-net-01",
                "EndpointID": "2efbfb4dd6b21eceb02736d87893be12070445853b7fec45eb7c9fb638e6ca12",
                "MacAddress": "02:42:c0:a8:00:02",
                "IPv4Address": "192.168.0.2/16", #ip范围在我们设置的区间里
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

# 再次进行--link中的测试 (通过ip 和 名称ping)
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker exec -it centos-net-01 ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.052 ms
^C
--- 192.168.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.052/0.058/0.065/0.010 ms

#现在不使用--link也可以ping名字了
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker exec -it centos-net-01 ping centos-net-02
PING centos-net-02 (192.168.0.3) 56(84) bytes of data.
64 bytes from centos-net-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from centos-net-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.055 ms
64 bytes from centos-net-02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.056 ms
^C
--- centos-net-02 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.041/0.050/0.056/0.010 ms

我们自定义的网络docker都已经帮我们维护好了相对应的关系, 推荐我们平时这样使用网络!

好处:

redis-不同的集群使用不同的网络 , 保证集群是安全和健康的

mysql-不同的集群使用不同的网络 , 保证集群是安全和健康的

网络连通

[root@iZuf61n8ywv9zx27oeoajoZ /]# 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

Run 'docker network COMMAND --help' for more information on a command.

# 我们可以用 docker network connect 来连通其它网络
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker network connect --help

Usage:	docker network connect [OPTIONS] NETWORK CONTAINER

Connect a container to a network

Options:
      --alias strings           Add network-scoped alias for the container
      --driver-opt strings      driver options for the network
      --ip string               IPv4 address (e.g., 172.30.100.104)
      --ip6 string              IPv6 address (e.g., 2001:db8::33)
      --link list               Add link to another container
      --link-local-ip strings   Add a link-local address for the container
      
#我们先在docker0下面创建两个容器
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker run -dit --name centos-net-01 --net mynet centos /bin/bash
d89d299fd40b33457a8530a90b9d4c673ad30c984ad1b1abe18d97919a6bd243
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker run -dit --name centos-net-02 --net mynet centos /bin/bash
4f7674333b67301b03e32578f1d205fa43f096d83d2a51205b4942f5b5740ebc
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker exec -it centos02 ping centos-net-01
ping: centos-net-01: Name or service not known
# 可以发现,不同网段的容器之间是ping不通的  mynet是192.168.0.0/16   docker0是  172.17.0.0/16

测试

#测试打通 centos01 和 mynet
#连通之后就是将 centos01 放到了mynet网络下?
#一个容器两个ip地址! 阿里云服务:公网ip 私网ip
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker network connect mynet centos01
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker network inspect mynet
。。。
 "Containers": {
            "4f7674333b67301b03e32578f1d205fa43f096d83d2a51205b4942f5b5740ebc": {
                "Name": "centos-net-02",
                "EndpointID": "a4460f7d21cfd606eaaf299c22cf18e38e30b788f9d7bad1927187e5b3899274",
                "MacAddress": "02:42:c0:a8:00:03",
                "IPv4Address": "192.168.0.3/16",
                "IPv6Address": ""
            },
            "d89d299fd40b33457a8530a90b9d4c673ad30c984ad1b1abe18d97919a6bd243": {
                "Name": "centos-net-01",
                "EndpointID": "2efbfb4dd6b21eceb02736d87893be12070445853b7fec45eb7c9fb638e6ca12",
                "MacAddress": "02:42:c0:a8:00:02",
                "IPv4Address": "192.168.0.2/16",
                "IPv6Address": ""
            },
            "e2ce4f39344b9c97086ca872f3af86648dcd17a4e55a68ebbc6d3ee5688658fb": {
                "Name": "centos01",   #我们可以发现,centos01 被放到了mynet网络下
                "EndpointID": "a0557f498b6c443b20220c1726f3bb5c6bc9d761a88531e5880a86436e0dff6a",
                "MacAddress": "02:42:c0:a8:00:04",
                "IPv4Address": "192.168.0.4/16",
                "IPv6Address": ""
            }
        },
。。。
#1、连通ok
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker exec -it centos01 ping centos-net-01
PING centos-net-01 (192.168.0.2) 56(84) bytes of data.
64 bytes from centos-net-01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.062 ms
64 bytes from centos-net-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.053 ms
64 bytes from centos-net-01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.055 ms
^C
--- centos-net-01 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.053/0.056/0.062/0.009 ms
#2、是依旧打不通的
[root@iZuf61n8ywv9zx27oeoajoZ /]# docker exec -it centos02 ping centos-net-01
ping: centos-net-01: Name or service not known

结论:假设要跨网络操作别人, 就需要使用 docker network connect连通!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值