User-Profile-Image
hankin
  • 5
  • Java
  • Kotlin
  • Spring
  • Web
  • SQL
  • MegaData
  • More
  • Experience
  • Enamiĝu al vi
  • 分类
    • Zuul
    • Zookeeper
    • XML
    • WebSocket
    • Web Notes
    • Web
    • Vue
    • Thymeleaf
    • SQL Server
    • SQL Notes
    • SQL
    • SpringSecurity
    • SpringMVC
    • SpringJPA
    • SpringCloud
    • SpringBoot
    • Spring Notes
    • Spring
    • Servlet
    • Ribbon
    • Redis
    • RabbitMQ
    • Python
    • PostgreSQL
    • OAuth2
    • NOSQL
    • Netty
    • MySQL
    • MyBatis
    • More
    • MinIO
    • MegaData
    • Maven
    • LoadBalancer
    • Kotlin Notes
    • Kotlin
    • Kafka
    • jQuery
    • JavaScript
    • Java Notes
    • Java
    • Hystrix
    • Git
    • Gateway
    • Freemarker
    • Feign
    • Eureka
    • ElasticSearch
    • Docker
    • Consul
    • Ajax
    • ActiveMQ
  • 页面
    • 归档
    • 摘要
    • 杂图
    • 问题随笔
  • 友链
    • Spring Cloud Alibaba
    • Spring Cloud Alibaba - 指南
    • Spring Cloud
    • Nacos
    • Docker
    • ElasticSearch
    • Kotlin中文版
    • Kotlin易百
    • KotlinWeb3
    • KotlinNhooo
    • 前端开源搜索
    • Ktorm ORM
    • Ktorm-KSP
    • Ebean ORM
    • Maven
    • 江南一点雨
    • 江南国际站
    • 设计模式
    • 熊猫大佬
    • java学习
    • kotlin函数查询
    • Istio 服务网格
    • istio
    • Ktor 异步 Web 框架
    • PostGis
    • kuangstudy
    • 源码地图
    • it教程吧
    • Arthas-JVM调优
    • Electron
    • bugstack虫洞栈
    • github大佬宝典
    • Sa-Token
    • 前端技术胖
    • bennyhuo-Kt大佬
    • Rickiyang博客
    • 李大辉大佬博客
    • KOIN
    • SQLDelight
    • Exposed-Kt-ORM
    • Javalin—Web 框架
    • http4k—HTTP包
    • 爱威尔大佬
    • 小土豆
    • 小胖哥安全框架
    • 负雪明烛刷题
    • Kotlin-FP-Arrow
    • Lua参考手册
    • 美团文章
    • Java 全栈知识体系
    • 尼恩架构师学习
    • 现代 JavaScript 教程
    • GO相关文档
    • Go学习导航
    • GoCN社区
    • GO极客兔兔-案例
    • 讯飞星火GPT
    • Hollis博客
    • PostgreSQL德哥
    • 优质博客推荐
    • 半兽人大佬
    • 系列教程
    • PostgreSQL文章
    • 云原生资料库
    • 并发博客大佬
Help?

Please contact us on our email for need any support

Support
    首页   ›   More   ›   Docker   ›   正文
Docker

Docker—网络(六)

2020-11-04 15:37:33
794  0 0
参考目录 隐藏
1) 理解Docker0
2) 原理
3) 结论:
4) –Link
5) 自定义网络
6) 自定义网卡
7) 网络连通

阅读完需:约 16 分钟

理解Docker0

测试

查看本地ip ip addr

这里我们分析可得,有三个网络:

lo 127.0.0.1 # 本机回环地址
eth0 172.17.90.138 # 阿里云的私有IP
docker0 172.18.0.1 # docker网桥
# 问题:Docker 是如何处理容器网络访问的?

我们之前安装ES的时候,留过一个问题,就是安装Kibana的问题,Kibana得指定ES的地址!或者我们 实际场景中,我们开发了很多微服务项目,那些微服务项目都要连接数据库,需要指定数据库的url地 址,通过ip。但是我们用Docker管理的话,假设数据库出问题了,我们重新启动运行一个,这个时候数 据库的地址就会发生变化,docker会给每个容器都分配一个ip,且容器和容器之间是可以互相访问的。 我们可以测试下容器之间能不能ping通过:

# 启动tomcat01
[root@VM-0-13-centos file]# docker run -d -P --name tomcat01 tomcat
5cd7be55c45c818f9c0e81fae7f3dc8dc70fbad4f7e1a59d72ce0d2a7dc7e865

# 查看tomcat01的ip地址,docker会给每个容器都分配一个ip!
[root@VM-0-13-centos file]# docker exec -it tomcat01 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
293: eth0@if294: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc 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

# 思考,我们的linux服务器是否可以ping通容器内的tomcat ?
[root@VM-0-13-centos file]# ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.091 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.050 ms
64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.050 ms
64 bytes from 172.18.0.2: icmp_seq=4 ttl=64 time=0.044 ms
^C
--- 172.18.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.044/0.058/0.091/0.021 ms
[root@VM-0-13-centos file]# 

原理

1、每一个安装了Docker的linux主机都有一个docker0的虚拟网卡。这是个桥接网卡,使用了veth-pair 技术!

# 我们再次查看主机的 ip addr

[root@VM-0-13-centos file]# 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
    inet6 ::1/128 scope host 
       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 52:54:00:04:cd:d7 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.13/20 brd 172.17.15.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe04:cdd7/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:35:44:00:f9 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
    inet6 fe80::42:35ff:fe44:f9/64 scope link 
       valid_lft forever preferred_lft forever
294: veth975dd15@if293: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether aa:55:ae:d0:e7:3b brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::a855:aeff:fed0:e73b/64 scope link 
       valid_lft forever preferred_lft forever

# 发现:本来我们有三个网络,我们在启动了个tomcat容器之后,多了一个!294的网络!

2、每启动一个容器,linux主机就会多了一个虚拟网卡。

# 我们启动了一个tomcat01,主机的ip地址多了一个    294: veth975dd15@if293
# 然后我们在tomcat01容器中查看容器的ip是         293: eth0@if294

# 我们再启动一个tomcat02观察
[root@VM-0-13-centos file]# docker run -d -P --name tomcat02 tomcat

# 然后发现linux主机上又多了一个网卡       296: veth82e49cd@if295
# 我们看下tomcat02的容器内ip地址是       295: eth0@if296

[root@VM-0-13-centos file]# docker exec -it tomcat02 ip addr

# 观察现象:
# tomcat --- linux主机 veth975dd15@if293 ---- 容器内 eth0@if123
# tomcat --- linux主机 veth82e49cd@if295 ---- 容器内 eth0@if125
# 相信到了这里,大家应该能看出点小猫腻了吧!只要启动一个容器,就有一对网卡
# veth-pair 就是一对的虚拟设备接口,它都是成对出现的。一端连着协议栈,一端彼此相连着。
# 正因为有这个特性,它常常充当着一个桥梁,连接着各种虚拟网络设备!
# “Bridge、OVS 之间的连接”,“Docker 容器之间的连接” 等等,以此构建出非常复杂的虚拟网络
结构,比如 OpenStack Neutron。

3、我们来测试下tomcat01和tomcat02容器间是否可以互相ping通

在容器 tomcat02 中ping容器 tomcat01 的ip地址

root@d76a0e84b68f:/usr/local/tomcat# ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.089 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.066 ms
64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.063 ms
64 bytes from 172.18.0.2: icmp_seq=4 ttl=64 time=0.058 ms
64 bytes from 172.18.0.2: icmp_seq=5 ttl=64 time=0.067 ms
^C
--- 172.18.0.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 0.058/0.068/0.089/0.014 ms

# 结论:容器和容器之间是可以互相访问的。

结论:

tomcat1和tomcat2共用一个路由器。是的,他们使用的一个,就是docker0。任何一个容器启动 默认都是docker0网络。 docker默认会给容器分配一个可用ip。

小结

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

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

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

–Link

思考一个场景,我们编写一个微服务,数据库连接地址原来是使用ip的,如果ip变化就不行了,那我们 能不能使用服务名访问呢?

jdbc:mysql://mysql:3306,这样的话哪怕mysql重启,我们也不需要修改配置了!docker提供了 –link 的操作!

# 我们使用tomcat02,直接通过容器名ping tomcat01,不使用ip

[root@VM-0-13-centos file]#  docker exec -it tomcat02 ping tomcat01
ping: tomcat01: Name or service not known

# 我们再启动一个tomcat03,但是启动的时候连接tomcat02
[root@VM-0-13-centos file]#  docker run -d -P --name tomcat03 --link tomcat02 tomcat
784b7a80b4168b4082ee1ee29d19ff638227365352813bdea2c15cbdde4409b0

# 这个时候,我们就可以使用tomcat03 ping通tomcat02 了
[root@VM-0-13-centos file]# docker exec -it tomcat03 ping tomcat02
PING tomcat02 (172.18.0.3) 56(84) bytes of data.
64 bytes from tomcat02 (172.18.0.3): icmp_seq=1 ttl=64 time=0.081 ms
64 bytes from tomcat02 (172.18.0.3): icmp_seq=2 ttl=64 time=0.055 ms
^C
--- tomcat02 ping statistics ---

# 再来测试,tomcat03 是否可以ping tomcat01 失败
[root@VM-0-13-centos file]# docker exec -it tomcat03 ping tomcat01
ping: tomcat01: Name or service not known

# 再来测试,tomcat02 是否可以ping tomcat03 反向也ping不通
[root@VM-0-13-centos file]# docker exec -it tomcat02 ping tomcat03
ping: tomcat03: Name or service not known

思考,这个原理是什么呢?我们进入tomcat03中查看下host配置文件

[root@VM-0-13-centos file]#  docker exec -it tomcat03 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.18.0.3	tomcat02 d76a0e84b68f  # 发现tomcat2直接被写在这里
172.18.0.4	784b7a80b416

# 所以这里其实就是配置了一个 hosts 地址而已!
# 原因:--link的时候,直接把需要link的主机的域名和ip直接配置到了hosts文件中了。

–link早都过时了,我们不推荐使用!我们可以使用自定义网络的方式

自定义网络

基本命令查看

查看所有网络

docker network ls

  • network:⽹络服务的命令
  • ls:列出当前docker底层⽹络的信息
  • 默认每个docker容器都会提供⼀个默认的⽹桥,⽹桥承担容器和外⾯互通的桥梁
[root@VM-0-13-centos file]# docker network ls
NETWORK ID          NAME                  DRIVER              SCOPE
f8a835c75344        bridge                bridge              local
5f3831b496a3        composetest_default   bridge              local
33eb018d22fd        host                  host                local
13dcb093edde        mynet                 bridge              local
5cf1e672e12a        none                  null                local
c55f77e92535        redis                 bridge              local

所有网路模式

查看一个具体的网络的详细信息

[root@VM-0-13-centos file]#  docker network inspect f8a835c75344
[
    {
        "Name": "bridge",
        "Id": "f8a835c7534486fd2357ce6482b59c1fd2c6e4232fbbf6beaa75518291c503ac",
        "Created": "2020-10-28T21:09:12.035211665+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "5cd7be55c45c818f9c0e81fae7f3dc8dc70fbad4f7e1a59d72ce0d2a7dc7e865": {
                "Name": "tomcat01",
                "EndpointID": "fc16eb5f08ee43fee1ccb63f88059c0ff7c82fb27df5ce910a58ef295d07931a",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "784b7a80b4168b4082ee1ee29d19ff638227365352813bdea2c15cbdde4409b0": {
                "Name": "tomcat03",
                "EndpointID": "88394b60b081e9049df6ca512637a45e8d50116407ecbde6d71c98177d56b398",
                "MacAddress": "02:42:ac:12:00:04",
                "IPv4Address": "172.18.0.4/16",
                "IPv6Address": ""
            },
            "d76a0e84b68f23217cb34c85fc1d638a59efd43b6c20d74faf0b185c475da537": {
                "Name": "tomcat02",
                "EndpointID": "086868a5980ec62a7c3bd35177b5c9872835233aa500a5974bcc0b98b4e579c5",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.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": {}
    }
]

自定义网卡

我们来创建容器,但是我们知道默认创建的容器都是docker0网卡的

# 默认我们不配置网络,也就相当于默认值 --net bridge 使用的docker0
docker run -d -P --name tomcat01 --net bridge tomcat

# docker0网络的特点
1.它是默认的
2.域名访问不通
3.--link 域名通了,但是删了又不行

我们可以让容器创建的时候使用自定义网络

docker network create -d bridge my-bridge

  • 新建⽹络的类型:⽹桥
  • 创建后,返回⼀个id创建后,返回⼀个id
删除原来不需要的网络

docker network ls
查看docker网卡

docker network rm 网卡id
删除docker网卡

docker network inspect 网卡id
查看docker网卡的相关详细信息

# 自定义创建的默认default "bridge"
# 自定义创建一个网络网络
[root@VM-0-13-centos file]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.11 mynetss
655153416b3e1594e471834c1bf3b2041d220afd06734138c6de605fd3dfdc69

[root@VM-0-13-centos file]# docker network ls
NETWORK ID          NAME                  DRIVER              SCOPE
f8a835c75344        bridge                bridge              local
5f3831b496a3        composetest_default   bridge              local
33eb018d22fd        host                  host                local
655153416b3e        mynetss               bridge              local
5cf1e672e12a        none                  null                local
c55f77e92535        redis                 bridge              local

[root@VM-0-13-centos file]# docker network inspect mynetss
[
    {
        "Name": "mynetss",
        "Id": "655153416b3e1594e471834c1bf3b2041d220afd06734138c6de605fd3dfdc69",
        "Created": "2020-11-04T15:12:19.129289147+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.0.0/16",
                    "Gateway": "192.168.0.11"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

# 我们来启动两个容器测试,使用自己的 mynetss!
[root@VM-0-13-centos file]# docker run -d -P --name tomcat-net-01 --net mynetss tomcat
2547e4ea0268e103c3368d9db5825d6b4fe3b706278a242b3f1c3ab492fbae96
[root@VM-0-13-centos file]# docker run -d -P --name tomcat-net-02 --net mynetss tomcat
0583683f87ff3dd62672421d2714fa3cc01eaa7ad12ea888b2d1215705638fe1
[root@VM-0-13-centos file]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
0583683f87ff        tomcat              "catalina.sh run"   5 seconds ago       Up 3 seconds        0.0.0.0:32783->8080/tcp   tomcat-net-02
2547e4ea0268        tomcat              "catalina.sh run"   14 seconds ago      Up 12 seconds       0.0.0.0:32782->8080/tcp   tomcat-net-01

# 再来查看下
[root@VM-0-13-centos file]#  docker network inspect mynetss
[
    {
        "Name": "mynetss",
        "Id": "655153416b3e1594e471834c1bf3b2041d220afd06734138c6de605fd3dfdc69",
        "Created": "2020-11-04T15:12:19.129289147+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.0.0/16",
                    "Gateway": "192.168.0.11"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "0583683f87ff3dd62672421d2714fa3cc01eaa7ad12ea888b2d1215705638fe1": {
                "Name": "tomcat-net-02",
                "EndpointID": "d75b1d34d88d06d398a80a119a255e9bd2ed8d335ba3203ac41a27701e4cc57c",
                "MacAddress": "02:42:c0:a8:00:02",
                "IPv4Address": "192.168.0.2/16",
                "IPv6Address": ""
            },
            "2547e4ea0268e103c3368d9db5825d6b4fe3b706278a242b3f1c3ab492fbae96": {
                "Name": "tomcat-net-01",
                "EndpointID": "3315ac2045b5bc7b3be63dfff25b947d981110bd62a4f0e491fa2ea53b5e158a",
                "MacAddress": "02:42:c0:a8:00:01",
                "IPv4Address": "192.168.0.1/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

# 我们来测试ping容器名和ip试试,都可以ping通
[root@VM-0-13-centos file]# docker exec -it tomcat-net-01 ping 192.168.0.2
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.078 ms
64 bytes from 192.168.0.2: icmp_seq=2 ttl=64 time=0.055 ms
64 bytes from 192.168.0.2: icmp_seq=3 ttl=64 time=0.057 ms

[root@VM-0-13-centos file]# docker exec -it tomcat-net-01 ping tomcat-net-02
PING tomcat-net-02 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat-net-02.mynetss (192.168.0.2): icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from tomcat-net-02.mynetss (192.168.0.2): icmp_seq=2 ttl=64 time=0.054 ms
64 bytes from tomcat-net-02.mynetss (192.168.0.2): icmp_seq=3 ttl=64 time=0.046 ms
^X64 bytes from tomcat-net-02.mynetss (192.168.0.2): icmp_seq=4 ttl=64 time=0.039 m

发现,我们自定义的网络docker都已经帮我们维护好了对应的关系

所以我们平时都可以这样使用网络,不使用–link效果一样,所有东西实时维护好,直接域名 ping 通。

网络连通

docker0和自定义网络肯定不通,我们使用自定义网络的好处就是网络隔离:

假设我们有一个商城,我们会有订单业务(操作不同数据),会有 订单业务购物车业务(操作不同缓存)。如果在一个网络下,有的程序猿的恶意代码就不能防止了,所 以我们就在部署的时候网络隔离,创建两个桥接网卡,比如订单业务(里面的数据库,redis,mq,全 部业务 都在order-net网络下)其他业务在其他网络。 那关键的问题来了,如何让 tomcat-net-01 访问 tomcat1?

容器和⽹桥的绑定

docker network connect my-bridge web

docker network connect my-bridge database

  • 容器和⽹桥绑定
    • my-bridge:⽹桥的名称
    • web:容器的名称

两个容器就互通了,两个容器之间都绑定bridge


创建⽹桥的背后,在docker中,每当创建⼀个⽹桥,在宿主机上安装⼀个虚拟⽹卡,这个虚拟⽹卡也承担起⽹关的作⽤,web和database通过虚拟⽹卡绑定,在docker容器内部,就可以实现互联互通,从⼀个容器发出的数据,都可以通过⽹关找到另⼀个容器来接收数据,反之,同理

虚拟⽹卡所构成的⽹关就形成了⼀个内部通路,只要新的容器绑定到虚拟⽹卡上,就可以和其他绑定虚拟⽹卡互连互通

虚拟⽹卡的ip地址是虚拟,但和外部通信的话虚拟⽹卡需要和宿主机的物理⽹卡做地址转换,和外⽹通信


# 启动默认的容器,在docker0网络下

[root@VM-0-13-centos file]#  docker run -d -P --name tomcat01 tomcat
355662f225c84c8826b166245b36d027e1755a0c3c43763d6f4651a70e7fed80
[root@VM-0-13-centos file]#  docker run -d -P --name tomcat02 tomcat
abcdd72e67cd6edce0afaba7bd148a660ace7547eedc9813b42187bb1878853b

# 查看当前的容器
[root@VM-0-13-centos file]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
abcdd72e67cd        tomcat              "catalina.sh run"   45 seconds ago      Up 44 seconds       0.0.0.0:32785->8080/tcp   tomcat02
355662f225c8        tomcat              "catalina.sh run"   59 seconds ago      Up 58 seconds       0.0.0.0:32784->8080/tcp   tomcat01
0583683f87ff        tomcat              "catalina.sh run"   14 minutes ago      Up 14 minutes       0.0.0.0:32783->8080/tcp   tomcat-net-02
2547e4ea0268        tomcat              "catalina.sh run"   14 minutes ago      Up 14 minutes       0.0.0.0:32782->8080/tcp   tomcat-net-01

# 我们来查看下network帮助,发现一个命令 connect
# 我们来测试一下!打通 mynet-docker0
# 命令 docker network connect [OPTIONS] NETWORK CONTAINER

[root@VM-0-13-centos file]# docker network connect mynetss tomcat01
[root@VM-0-13-centos file]# docker network inspect mynetss
[
    {
        "Name": "mynetss",
        "Id": "655153416b3e1594e471834c1bf3b2041d220afd06734138c6de605fd3dfdc69",
        "Created": "2020-11-04T15:12:19.129289147+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.0.0/16",
                    "Gateway": "192.168.0.11"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "0583683f87ff3dd62672421d2714fa3cc01eaa7ad12ea888b2d1215705638fe1": {
                "Name": "tomcat-net-02",
                "EndpointID": "d75b1d34d88d06d398a80a119a255e9bd2ed8d335ba3203ac41a27701e4cc57c",
                "MacAddress": "02:42:c0:a8:00:02",
                "IPv4Address": "192.168.0.2/16",
                "IPv6Address": ""
            },
            "2547e4ea0268e103c3368d9db5825d6b4fe3b706278a242b3f1c3ab492fbae96": {
                "Name": "tomcat-net-01",
                "EndpointID": "3315ac2045b5bc7b3be63dfff25b947d981110bd62a4f0e491fa2ea53b5e158a",
                "MacAddress": "02:42:c0:a8:00:01",
                "IPv4Address": "192.168.0.1/16",
                "IPv6Address": ""
            },
            "355662f225c84c8826b166245b36d027e1755a0c3c43763d6f4651a70e7fed80": {
                "Name": "tomcat01",
                "EndpointID": "cef3abb34d5e7013ff12abd23da28000aa406e89dac6dc7f88bec8638d1be9b3",
                "MacAddress": "02:42:c0:a8:00:03",
                "IPv4Address": "192.168.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

# tomcat01 可以ping通了
[root@VM-0-13-centos file]# docker exec -it tomcat01 ping tomcat-net-01
PING tomcat-net-01 (192.168.0.1) 56(84) bytes of data.
64 bytes from tomcat-net-01.mynetss (192.168.0.1): icmp_seq=1 ttl=64 time=0.060 ms
64 bytes from tomcat-net-01.mynetss (192.168.0.1): icmp_seq=2 ttl=64 time=0.058 ms
64 bytes from tomcat-net-01.mynetss (192.168.0.1): icmp_seq=3 ttl=64 time=0.063 ms

# tomcat02 依旧ping不通,大家应该就理解了
[root@VM-0-13-centos file]# docker exec -it tomcat02 ping tomcat-net-01
ping: tomcat-net-01: Name or service not known

结论:

如果要跨网络操作别人,就需要使用 docker network connect [OPTIONS] NETWORK CONTAINER 连接

如本文“对您有用”,欢迎随意打赏作者,让我们坚持创作!

0 打赏
Enamiĝu al vi
不要为明天忧虑.因为明天自有明天的忧虑.一天的难处一天当就够了。
543文章 68评论 294点赞 594180浏览

随机文章
Java— I/O流框架
4年前
SpringBoot—MockMvc单元测试
5年前
Kotlin-类型初步—空类型安全(九)
4年前
PostgreSQL—如何查找TOP SQL
1年前
Java—Future模式(数据库连接池)
5年前
博客统计
  • 日志总数:543 篇
  • 评论数目:68 条
  • 建站日期:2020-03-06
  • 运行天数:1927 天
  • 标签总数:23 个
  • 最后更新:2024-12-20
Copyright © 2025 网站备案号: 浙ICP备20017730号 身体没有灵魂是死的,信心没有行为也是死的。
主页
页面
  • 归档
  • 摘要
  • 杂图
  • 问题随笔
博主
Enamiĝu al vi
Enamiĝu al vi 管理员
To be, or not to be
543 文章 68 评论 594180 浏览
测试
测试
看板娘
赞赏作者

请通过微信、支付宝 APP 扫一扫

感谢您对作者的支持!

 支付宝 微信支付