[Docker]七.配置 Docker 网络

一.Docker0 网络

1.多个容器之间如何通信,是否可以直接连接

默认启动的所有容器都会加入到docker0这个网络中,所有各个容器件是可以直接通信的

先看看网卡信息: 

启动几个容器来演示一下:

#启动mycentos这个容器
[root@localhost zph]# docker run -it -d --name mycentos d757f6342cfa /bin/bash
7845d3930d4a6ee995f11c33e9dae2b688032b2d5c6a655148104ab4f33cd2c5
[root@localhost zph]# 
[root@localhost zph]# docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS         PORTS     NAMES
7845d3930d4a   d757f6342cfa   "/bin/bash"   11 seconds ago   Up 3 seconds             mycentos

 

 

说明了每次启动一个容器时,都会增加一个网卡信息,下面来测试一下几个容之间可以相互通信不? 

分别查看 3 块网卡的 IP 信息 

[root@localhost zph]# docker exec -it mycentos ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)RX packets 45  bytes 5710 (5.5 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@localhost zph]# docker exec -it mycentos2 ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)RX packets 21  bytes 2436 (2.3 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@localhost zph]# docker exec -it mycentos3 ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.4  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:ac:11:00:04  txqueuelen 0  (Ethernet)RX packets 20  bytes 2366 (2.3 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 发现:

        mycentos 的IP地址为:172.17.0.2 

        mycentos2 的IP地址为:172.17.0.3 

        mycentos3 的IP地址为:172.17.0.4 

进入mycentos容器,ping一下mycentos2,看看两个容器是否可以通信

ping得通,说明几个容器之间可以相互通信 

然后,退出容器,在主机上ping一下容器,看看是否ping通

ping得通,说明同一台主机上面的容器和主机之间是可以互相通信的
 
结论
         默认情况同一台主机上面的容器是可以互相通信的,默认情况同一台主机上面的容器
和主机之间是可以互相通信的

2.通信原理

每启动一个 Docker 容器, Docker 就会给 Docker 容器分配一个 ip ,只要安装了 Docker
就会有一个网卡 Docker0 Docker0 使用的是桥接模式,使用的技术是 veth-pair 技术

#启动mycentos这个容器
[root@localhost zph]# docker run -it -d --name mycentos d757f6342cfa /bin/bash
7845d3930d4a6ee995f11c33e9dae2b688032b2d5c6a655148104ab4f33cd2c5
[root@localhost zph]# 
[root@localhost zph]# docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS         PORTS     NAMES
7845d3930d4a   d757f6342cfa   "/bin/bash"   11 seconds ago   Up 3 seconds             mycentos

 

 

说明了每次启动一个容器时,都会增加一个网卡信息

 

 

3.使用默认网络的问题 

(1).没法使用计算机主机名实现通信

(2).没法实现网络隔离

当有几个容器:nignx, mysql等时,启动容器后,都加入了docker0网络,没法实现网络隔离

那么,该怎么处理呢,就需要进行自定义网络设置了,可以通过docker network来实现

二.Docker Network 详解

1.关于 docker network 命令

(1).docker network ls 查看当前计算机上的网络

(2).docker network inspect 查看网络详情

[root@localhost zph]# docker network ls
NETWORK ID     NAME                 DRIVER    SCOPE
2d19a8dfb493   bridge               bridge    local
fe75119d5a77   dockerlnmp_default   bridge    local
9a2fe27fdd30   dockerlnmp_server    bridge    local
fc03b9653496   host                 host      local
b8b81a5aa87c   none                 null      local
[root@localhost zph]# docker network inspect 2d19a8dfb493
[{"Name": "bridge","Id": "2d19a8dfb4930b4581ec74f9b6c07878a5cb85378c6841c0ea3e0eabdc3d8bc3","Created": "2023-11-18T18:36:58.528816645-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": {"005f0e3b21e468d2526f4b444b82b9459599d64db465cf029cc7b1794351cd64": {"Name": "mycentos2","EndpointID": "e1935af85b74f19cd8d6b078c1535b09d6e509ff28da355b5473ca116643c8b2","MacAddress": "02:42:ac:11:00:03","IPv4Address": "172.17.0.3/16","IPv6Address": ""},"7845d3930d4a6ee995f11c33e9dae2b688032b2d5c6a655148104ab4f33cd2c5": {"Name": "mycentos","EndpointID": "7be4ae43f9e0881e63e58878d56507ad9235eb542212acf2874e35aa698e4d63","MacAddress": "02:42:ac:11:00:02","IPv4Address": "172.17.0.2/16","IPv6Address": ""},"8f7731eea4d11d1829a1d963ba539bcab876a085bad442014a9727c519a455f2": {"Name": "mycentos3","EndpointID": "25fc5c8d55d4ec52b786f78ddbbfc66551c372e6043466f04c98b14c1f695e6e","MacAddress": "02:42:ac:11:00:04","IPv4Address": "172.17.0.4/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": {}}
]

(3).docker network rm 删除网络 

#查看网络
[root@localhost zph]# docker network ls
NETWORK ID     NAME                 DRIVER    SCOPE
2d19a8dfb493   bridge               bridge    local
fe75119d5a77   dockerlnmp_default   bridge    local
9a2fe27fdd30   dockerlnmp_server    bridge    local
fc03b9653496   host                 host      local
f336219e4dbb   mysql                bridge    local#删除网络
[root@localhost zph]# docker network rm mysql
mysql#查看是否已删除
[root@localhost zph]# docker network ls
NETWORK ID     NAME                 DRIVER    SCOPE
2d19a8dfb493   bridge               bridge    local
fe75119d5a77   dockerlnmp_default   bridge    local
9a2fe27fdd30   dockerlnmp_server    bridge    local
fc03b9653496   host                 host      local

(4).docker network create 创建网络以及启动容器指定网络

通过docker network create 创建网络以及启动容器指定网络(可以创建网络的类型),这样当启动容器后就可以把容器加入到自己的网络了,这样就可以解决上面使用默认网络的问题:

  • 没法实现网络隔离
  • 没法使用计算机主机名实现通信
网络的类型分类如下
Docker 网络模式
配置
说明
host 模式
--net=host
容器和宿主机共享 Network namespace,使用同一个ip
container 模式
--net=container:NAME  or  ID
容器和另外一个容器共享 Network namespace,
kubernetes 中的 pod 就是多个容器共享一个
Network namespace
none 模式
--net=none
容器有独立的 Network namespace ,但并没有对其进行任何网 络设置 ,如分配 evth pair 和网桥连
接,配置 IP
bridge 模式
--net=bridge
默认为该模式
host 模式

如果启动容器的时候使用 host 模式,那么这个容器 将不会获得一个独立的 Network
Namespace ,而是 和宿主机共用一个 Network Namespace 。容器将不会虚拟出自己的网卡, 配置自己的 IP 等,而是 使用宿主机的 IP 和端口, 但是,容器的其他方面,如文件系统、进 程列表等还是和宿主机隔离的。 使用 host 模式的容器可以直接使用宿主机的 IP 地址与外界通信,容器内部的服务端口也可 以使用宿主机的端口,不需要进行 NAT host 最大的优势就是网络性能比较好,但是 docker host 上已经使用的端口就不能再用了, 网络的隔离性不好

container 模式

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

使用 none 模式, Docker 容器拥有自己的 Network Namespace ,但是,并不为 Docker 容器进行任何网络配置。也就是说,这个 Docker 容器没有网卡、 IP 、路由等信息。需要自己为 Docker 容器添加网卡、配置 IP 等。 这种网络模式下容器只有 lo 回环网络,没有其他网卡。 none 模式可以在容器创建时通过 --network=none 来指定。 这种类型的网络没有办法联网 ,封闭的网络能很好的保证容器的安全性

bridge 模式

Docker 进程启动时,会在主机上创建一个名为 docker0 虚拟网桥 ,此主机上启动 Docker容器会连接到这个虚拟网桥上,虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中,从docker0 子网中 分配一个 IP 给容器使用,并设置 docker0 的 IP 地址为容器的默认网关。在主机上创建一对 虚拟网卡 veth pair 设备,Docker 将 veth pair 设备的一端放在新创建的容器中,并命名为 eth0(容器的网卡),另一端放在主机中,以 vethxxx 这样类似的名字命名,并将这个网络设备加入到 docker0 网中。可以通过 brctl show 命令查看,bridge 模式是 docker 的默认网络模式,不写--net 参数,就是 bridge 模式。使用 docker run -p时, docker 实际是在 iptables 做了 DNAT 规则,实现端口转发功能,可以使用 iptables -t nat -vnL 查看

 docker network create基本语法

--driver 配置网络连接方式,一般是bridge

--gateway: 配置网关

--subnet: 配置子网,局域网的网段

建议配置子网范围的时候范围不要太大

创建一个docker1网络 
--driver bridge
        配置网络类型 bridge 桥接
--subnet 192.168.1.0/24
        配置子网 建议每个网络的范围尽量小
--gateway 192.168.1.1
        配置网关
docker network create --driver bridge --subnet 192.168.1.0/24 --gateway 192.168.1.1 docker1
#创建一个docker网络
[root@localhost zph]# docker network create --driver bridge --subnet 192.168.1.0/24 --gateway 192.168.1.1 docker1
c0fbaf2266c86f504d02a9324c45fb49c1909f908631d6a2cd5b1bb04dc981a8
#创建成功
[root@localhost zph]# docker network ls
NETWORK ID     NAME                 DRIVER    SCOPE
2d19a8dfb493   bridge               bridge    local
c0fbaf2266c8   docker1              bridge    local
fe75119d5a77   dockerlnmp_default   bridge    local
9a2fe27fdd30   dockerlnmp_server    bridge    local
fc03b9653496   host                 host      local
创建一个docker2网络 
--driver bridge
        配置网络类型 bridge 桥接
--subnet 192.168.2.0/24
        配置子网 建议每个网络的范围尽量小
--gateway 192.168.2.1
        配置网关
docker network create --driver bridge --subnet 192.168.2.0/24 --gateway 192.168.2.1 docker2

#创建一个docker2网络
[root@localhost zph]# docker network create --driver bridge --subnet 192.168.2.0/24 --gateway 192.168.2.1 docker2
2d9c2d29e6d308733bf266978914a6b43cbab575a2d99d0928908bc09a6d4f40
#创建成功
[root@localhost zph]# docker network ls
NETWORK ID     NAME                 DRIVER    SCOPE
2d19a8dfb493   bridge               bridge    local
c0fbaf2266c8   docker1              bridge    local
2d9c2d29e6d3   docker2              bridge    local
fe75119d5a77   dockerlnmp_default   bridge    local
9a2fe27fdd30   dockerlnmp_server    bridge    local
fc03b9653496   host                 host      local

可以通过docker inspect docker1/docker2 查看相关配置:

[root@localhost zph]# docker inspect docker1
[{"Name": "docker1","Id": "c0fbaf2266c86f504d02a9324c45fb49c1909f908631d6a2cd5b1bb04dc981a8","Created": "2023-11-20T18:19:18.375826061-08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.1.0/24","Gateway": "192.168.1.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]
[root@localhost zph]# docker inspect docker2
[{"Name": "docker2","Id": "2d9c2d29e6d308733bf266978914a6b43cbab575a2d99d0928908bc09a6d4f40","Created": "2023-11-20T18:21:29.173750083-08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.2.0/24","Gateway": "192.168.2.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]

(5).启动容器指定网络

启动容器的时候可以加上 --net 参数可以指定启动容器的时候使用的网络,如果不加表示默认使用 docker0 网络
--net bridge 表示使用 docker0 网络
#查看目前启动的容器
[root@localhost zph]# docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED        STATUS        PORTS     NAMES
8f7731eea4d1   d757f6342cfa   "/bin/bash"   42 hours ago   Up 42 hours             mycentos3
005f0e3b21e4   d757f6342cfa   "/bin/bash"   42 hours ago   Up 42 hours             mycentos2
7845d3930d4a   d757f6342cfa   "/bin/bash"   42 hours ago   Up 42 hours             mycentos#查看对应的镜像
[root@localhost zph]# docker images | grep d757f6342cfa
mycentos                         v1                  d757f6342cfa   2 days ago      434MB#启动一个容器mycentos4 ,并指定docker1为其网络
[root@localhost zph]# docker run -it -d --name mycentos4 --net docker1 d757f6342cfa /bin/bash
0ef1ea47894936e011c3efbafd5dbc49df14e5285f836a08345a48eb800349e6#启动一个容器mycentos5,并指定docker1为其网络
[root@localhost zph]# docker run -it -d --name mycentos5 --net docker1 d757f6342cfa /bin/bash
a1a6d02bb8ba6ce5bfdc96b32e7d16d8e76ce9960656dab3a2281bf46fa86793#启动一个容器mycentos6,并指定docker2为其网络
[root@localhost zph]# docker run -it -d --name mycentos6 --net docker2 d757f6342cfa /bin/bash
a6ed25db1e1e221eb510ad80646674d775313977360dda6070f24b320230e6fd#启动一个容器mycentos7,并指定docker2为其网络
^[[A[root@localhost zpdocker run -it -d --name mycentos7 --net docker2 d757f6342cfa /bin/bash
63aaf78d8a855dd6700b1e7c91b206103155871b845f6de863eff6907896d5cc#查看启动的容器列表
[root@localhost zph]# docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED              STATUS              PORTS     NAMES
63aaf78d8a85   d757f6342cfa   "/bin/bash"   7 seconds ago        Up 4 seconds                  mycentos7
a6ed25db1e1e   d757f6342cfa   "/bin/bash"   18 seconds ago       Up 16 seconds                 mycentos6
a1a6d02bb8ba   d757f6342cfa   "/bin/bash"   27 seconds ago       Up 24 seconds                 mycentos5
0ef1ea478949   d757f6342cfa   "/bin/bash"   About a minute ago   Up About a minute             mycentos4
8f7731eea4d1   d757f6342cfa   "/bin/bash"   42 hours ago         Up 42 hours                   mycentos3
005f0e3b21e4   d757f6342cfa   "/bin/bash"   42 hours ago         Up 42 hours                   mycentos2
7845d3930d4a   d757f6342cfa   "/bin/bash"   42 hours ago         Up 42 hours                   mycentos#查看容器mycentos4配置信息:发现网络在docker1中,子网范围在192.168.1.0/24范围中
[root@localhost zph]# docker inspect mycentos4
[..."Networks": {"docker1": {"IPAMConfig": null,"Links": null,"Aliases": ["0ef1ea478949"],"NetworkID": "c0fbaf2266c86f504d02a9324c45fb49c1909f908631d6a2cd5b1bb04dc981a8","EndpointID": "da176af0d1630cd9ab8c0bb78e6a3974933686f66f9c334c83b0b622f0b1d3fb","Gateway": "192.168.1.1","IPAddress": "192.168.1.2","IPPrefixLen": 24,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:c0:a8:01:02","DriverOpts": null}}}}
]#查看容器mycentos5配置信息:发现网络在docker1中,子网范围在192.168.1.0/24范围中
[root@localhost zph]# docker inspect mycentos5
[..."HostConfig": {"Binds": null,"ContainerIDFile": "","LogConfig": {"Type": "json-file","Config": {}},"NetworkMode": "docker1","PortBindings": {},."NetworkSettings": {"Networks": {"docker1": {"IPAMConfig": null,"Links": null,"Aliases": ["a1a6d02bb8ba"],"NetworkID": "c0fbaf2266c86f504d02a9324c45fb49c1909f908631d6a2cd5b1bb04dc981a8","EndpointID": "6611729f48e83c6c5b6829dd4cdb6437aca1aa0796679b9c6815769fac48a5cc","Gateway": "192.168.1.1","IPAddress": "192.168.1.3","IPPrefixLen": 24,"}}}}
]#查看容器mycentos6配置信息:发现网络在docker2中,子网范围在192.168.2.0/24范围中
[root@localhost zph]# docker inspect mycentos6
[..."NetworkMode": "docker2","PortBindings": {},"RestartPolicy": {"Name": "no","MaximumRetryCount": 0},"Networks": {"docker2": {"IPAMConfig": null,"Links": null,"Aliases": ["a6ed25db1e1e"],"NetworkID": "2d9c2d29e6d308733bf266978914a6b43cbab575a2d99d0928908bc09a6d4f40","EndpointID": "7973882a048f4d78a8d3f72e93b8f8a7ee914841689f8d342116a8be9a1ffb5d","Gateway": "192.168.2.1","IPAddress": "192.168.2.2","IPPrefixLen": 24,...}}}}
]#查看容器mycentos7配置信息:发现网络在docker2中,子网范围在192.168.2.0/24范围中
[root@localhost zph]# docker inspect mycentos7
[..."Config": {"NetworkSettings": {..."Networks": {"docker2": {"IPAMConfig": null,"Links": null,"Aliases": ["63aaf78d8a85"],"NetworkID": "2d9c2d29e6d308733bf266978914a6b43cbab575a2d99d0928908bc09a6d4f40","EndpointID": "d980fd516be8c6260647579dcad6e5dc9376e4090b7560ab206b04a3ce3ba5a0","Gateway": "192.168.2.1","IPAddress": "192.168.2.3","IPPrefixLen": 24,...}}}}
]#查看docker1网络:发现mycentos4,mycentos5容器在网络中
[root@localhost zph]# docker inspect docker1
[{"Name": "docker1","Id": "c0fbaf2266c86f504d02a9324c45fb49c1909f908631d6a2cd5b1bb04dc981a8","Created": "2023-11-20T18:19:18.375826061-08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.1.0/24","Gateway": "192.168.1.1"}]},..."ConfigOnly": false,"Containers": {"0ef1ea47894936e011c3efbafd5dbc49df14e5285f836a08345a48eb800349e6": {"Name": "mycentos4","EndpointID": "da176af0d1630cd9ab8c0bb78e6a3974933686f66f9c334c83b0b622f0b1d3fb","MacAddress": "02:42:c0:a8:01:02","IPv4Address": "192.168.1.2/24","IPv6Address": ""},"a1a6d02bb8ba6ce5bfdc96b32e7d16d8e76ce9960656dab3a2281bf46fa86793": {"Name": "mycentos5","EndpointID": "6611729f48e83c6c5b6829dd4cdb6437aca1aa0796679b9c6815769fac48a5cc","MacAddress": "02:42:c0:a8:01:03","IPv4Address": "192.168.1.3/24","IPv6Address": ""}},"Options": {},"Labels": {}}
]#查看docker2网络:发现mycentos6,mycentos7容器在网络中
[root@localhost zph]# docker inspect docker2
[{"Name": "docker2","Id": "2d9c2d29e6d308733bf266978914a6b43cbab575a2d99d0928908bc09a6d4f40","Created": "2023-11-20T18:21:29.173750083-08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.2.0/24","Gateway": "192.168.2.1"}]},..."Containers": {"63aaf78d8a855dd6700b1e7c91b206103155871b845f6de863eff6907896d5cc": {"Name": "mycentos7","EndpointID": "d980fd516be8c6260647579dcad6e5dc9376e4090b7560ab206b04a3ce3ba5a0","MacAddress": "02:42:c0:a8:02:03","IPv4Address": "192.168.2.3/24","IPv6Address": ""},"a6ed25db1e1e221eb510ad80646674d775313977360dda6070f24b320230e6fd": {"Name": "mycentos6","EndpointID": "7973882a048f4d78a8d3f72e93b8f8a7ee914841689f8d342116a8be9a1ffb5d","MacAddress": "02:42:c0:a8:02:02","IPv4Address": "192.168.2.2/24","IPv6Address": ""}},"Options": {},"Labels": {}}
]

 使用主机名称可以 ping

这样就把 centos4 和 centos5 ,centos6  centos7 分别加入了自定义的dockert1,docker2  网络,这样的话 centos4和 centos5是互通的,centos6和 centos7 是互通的,但是docker1,docker2 网络  docker0 网络默认是不互通的

 (6).docker network connect 实现不同网络之间的连通

如上图,如果想my centos2  可以 访问docker1 里面的 centos4 centos5 ,这个时候
就需要使用 docker network connect来实现

#查看mycentos2 ip地址: 发现是 172.17.0.3
[root@localhost zph]# docker exec -it mycentos2 ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)RX packets 68  bytes 5754 (5.6 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 6  bytes 476 (476.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0#查看mycentos4 ip地址: 发现是 192.168.1.2  
[root@localhost zph]# docker exec -it mycentos4 ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.1.2  netmask 255.255.255.0  broadcast 192.168.1.255ether 02:42:c0:a8:01:02  txqueuelen 0  (Ethernet)RX packets 45  bytes 5699 (5.5 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

说明mycentos2和mycentos4直接是不能通信的,因为他们不在同一个网段,如果想他们通信,就需要把mycentos2加入到mycentos4的网段中才得行,这样就需要使用docker network connect语句来实现了,语法:

#网络名:可以通过docker network ls查看
docker network connect 网络名 容器名/容器ID

#把mycentos2容器加入docker1网络
[root@localhost zph]# docker network connect docker1 mycentos2#查看dokcer1网络,发现容器中已经加入了mycentos2了
[root@localhost zph]# docker network inspect docker1
[{"Name": "docker1","Id": "c0fbaf2266c86f504d02a9324c45fb49c1909f908631d6a2cd5b1bb04dc981a8","Created": "2023-11-20T18:19:18.375826061-08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.1.0/24","Gateway": "192.168.1.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"005f0e3b21e468d2526f4b444b82b9459599d64db465cf029cc7b1794351cd64": {"Name": "mycentos2","EndpointID": "144b2d2989d1aded19d04229865aa9beacc72e95cae36acc30fd719e578c0b1d","MacAddress": "02:42:c0:a8:01:04","IPv4Address": "192.168.1.4/24","IPv6Address": ""},"0ef1ea47894936e011c3efbafd5dbc49df14e5285f836a08345a48eb800349e6": {"Name": "mycentos4","EndpointID": "da176af0d1630cd9ab8c0bb78e6a3974933686f66f9c334c83b0b622f0b1d3fb","MacAddress": "02:42:c0:a8:01:02","IPv4Address": "192.168.1.2/24","IPv6Address": ""},"a1a6d02bb8ba6ce5bfdc96b32e7d16d8e76ce9960656dab3a2281bf46fa86793": {"Name": "mycentos5","EndpointID": "6611729f48e83c6c5b6829dd4cdb6437aca1aa0796679b9c6815769fac48a5cc","MacAddress": "02:42:c0:a8:01:03","IPv4Address": "192.168.1.3/24","IPv6Address": ""}},"Options": {},"Labels": {}}
]#mycentos4 ping mycentos2,可以ping通
[root@localhost zph]# docker exec -it mycentos4 ping mycentos2
PING mycentos2 (192.168.1.4) 56(84) bytes of data.
64 bytes from mycentos2.docker1 (192.168.1.4): icmp_seq=1 ttl=64 time=0.176 ms
64 bytes from mycentos2.docker1 (192.168.1.4): icmp_seq=2 ttl=64 time=0.058 ms

这样就实现了不同网络不同容器之间的通信了

[上一节][Docker]六.Docker自动部署nodejs以及golang项目 

[下一节][Docker]八.Docker 容器跨主机通讯

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/156663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSG文字-各种文字效果(边框、阴影及颜色倾斜)示例(2)

各种文字效果(边框、阴影及颜色倾斜)示例 各种文字效果(边框、阴影及颜色倾斜)示例的代码如程序清单9-2所示&#xff1a; 1. /* 各种文字效果(边框、阴影及颜色倾斜)示例 */ 2. osg::ref_ptr<osg::Camera> createAllKindText(const string &strDataFolder) 3. {…

家政保洁预约小程序app开发特点有哪些?

家政预约服务小程序APP开发的特点介绍&#xff1b; 1. 低成本&#xff1a;用户通过手机APP下单&#xff0c;省去了中介费用&#xff0c;降低了雇主的雇佣成本。 2. 高收入&#xff1a;家政服务人员通过手机APP接单&#xff0c;省去了中介费用&#xff0c;从而提高了服务人员的…

京东优惠券查询API接口接入方案,item_search_coupon - 京东优惠券查询接口演示

要接入京东优惠券查询API接口&#xff08;item_search_coupon&#xff09;&#xff0c;您可以按照以下步骤进行操作&#xff1a; 注册并获取API密钥&#xff1a;首先&#xff0c;您需要在京东开放平台上注册并获取API密钥。这将为您提供唯一的标识符和密钥&#xff0c;用于访问…

图形编辑器开发:自定义光标管理

大家好&#xff0c;我是前端西瓜哥。 今天来讲讲如何在图形编辑器中使用自定义光标&#xff0c;并对光标其进行管理。 编辑器 github 地址&#xff1a; https://github.com/F-star/suika 线上体验&#xff1a; https://blog.fstars.wang/app/suika/ 自定义光标的意义是什么&am…

实践小记——C#科学计数法格式化输出

文章速览 示例默认输出&#xff0c;不设置小数精度设置尾数部分的小数精度 总结参考文章 坚持记录实属不易&#xff0c;希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区&#xff01; 谢谢~ 示例 默认输出&#xff0c;不设置小数精度 private void Fo…

前端vite打包工具

文章目录 vite简介特点搭建步骤 vite简介特点 Vite是在推出Vue 3的时候开发的&#xff0c;目前仅支持Vue 3.x&#xff0c;这意味着与Vue 3不兼容的库也不能与Vite一起使用。持热更新&#xff0c;而且热更新的速度不会随着模块增多而变慢。在生产环境下使用Rollup打包。Vite 的…

苍穹外卖—解决前端时间属性显示问题

项目场景&#xff1a; 点击员工管理 出现显示时间属性问题 输入员工姓名为zhangsan 现实的时间属性是数组类型 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 例如&#xff1a;数据传输过程中数据不时出现丢失的情况&#xff0c;偶尔会丢失一部分数据 APP …

简单但好用:4种Selenium截图方法了解一下!

前言 我们执行UI自动化操作时&#xff0c;大多数时间都是不在现场的&#xff0c;出现错误时&#xff0c;没有办法第一时间查看到&#xff0c;这时我们可以通过截图当时出错的场景保存下来&#xff0c;后面进行查看报错的原因&#xff0c;Selenium中提供了几种截图的方法&#x…

vue2使用el-tag自定义菜单导航标签

需求&#xff1a;使用el-tag写个菜单导航栏&#xff0c;点击路由的时候就添加 功能&#xff1a; 设置鼠标横向滚动并且不展示滚动条添加关闭其他、关闭左侧、关闭右侧、全部关闭标签功能单个标签删除功能添加&#xff0c;固定标签不可删除右键点击展开操作菜单栏设置个默认固定…

excel自定义函数之汉字转为拼音及大写字母

使用场景&#xff1a;想把姓名转化为拼音格式&#xff0c;然后拼音转为大写字母 至于怎么在excel里面自定义函数&#xff0c;自行百度都有&#xff0c;这里简单截图看看。 步骤&#xff1a;文件》选项》自定义功能区》 打开编辑窗口 把下面这段代码粘贴就能实现汉字转化为拼音…

【无公网IP内网穿透】异地远程访问本地SQL Server数据库

目录 1.前言 2.本地安装和设置SQL Server 2.1 SQL Server下载 2.2 SQL Server本地连接测试 2.3 Cpolar内网穿透的下载和安装 2.3 Cpolar内网穿透的注册 3.本地网页发布 3.1 Cpolar云端设置 3.2 Cpolar本地设置 4.公网访问测试 5.结语 1.前言 数据库的重要性相信大家…

Proxifier是什么?如何用它测试代理ip对目标站的访问结果

Proxifier是一款用于Windows和macOS操作系统的网络工具&#xff0c;允许用户无需对每个应用程序进行单独的配置&#xff0c;就能通过代理服务器或防火墙进行网络连接&#xff0c;因而受到广泛欢迎。 Proxifier 功能强大而灵活&#xff0c;很多人对此一无所知&#xff0c;今天我…

【Python3】【力扣题】338. 比特位计数

【力扣题】题目描述&#xff1a; 题解&#xff1a;从0到n的整数&#xff0c;逐一统计二进制中1的个数&#xff0c;记录在一个新列表中。 【Python3】代码&#xff1a; 1、解题思路&#xff1a;Python函数。 知识点&#xff1a;bin(...)&#xff1a;转为二进制字符串&#xff…

阿里巴巴对裁员谣言报警

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 前两天王自如言论事件&#xff0c;格力选择了报警&#xff0c;称高管遭到姊妹集体侮辱诽谤。 而这两天&#xff0c;阿里巴巴也报警了&#xff0c;原因是网传阿里巴巴要裁员25000人。 咱不公关了…

【ArcGIS Pro二次开发】(77):ArcGIS Pro中图层的获取与解析

一、最简单的获取图层方式 通常情况下&#xff0c;如果要获取当前地图中的图层&#xff0c;可以用2种方法获取。 以下图为例&#xff1a; 一种是【map.Layers】属性获取&#xff0c;结果如下&#xff1a; 可以看出&#xff0c;这里只获取到了第一层级的图层&#xff0c;图层组…

Python数据结构基础教学,从零基础小白到实战大佬!

文章目录 前言 Python有那几种数据结构&#xff1f;1)列表&#xff08;list)1.1 什么是列表&#xff1f;1.2列表的增删改查 2&#xff09;字典&#xff08;Dictionary)2.1 什么是字典&#xff1f;2.2 字典的增删改查 3&#xff09;元组&#xff08;Tuple)4)集合&#xff08;Set…

Java学习之路 —— Java高级

文章目录 前言1. 单元测试2. 反射2.1 获取Class对象的三种方式2.2 获取类的构造器的方法2.3 获取类的成员变量2.4 获取类的成员方法2.5 反射的作用 3. 注解3.1 自定义注解3.2 注解的原理3.3 元注解3.4 注解的解析 4. 动态代理5. 总结 前言 终于走到新手村的末端了&#xff0c;…

【数据结构(三)】单链表(1)

文章目录 1. 链表介绍2. 单链表应用实例2.1. 顺序添加方式2.1.1. 思路分析2.1.2. 代码实现 2.2. 按照编号顺序添加方式2.2.1. 思路分析2.2.2. 代码实现 3. 单链表节点的修改3.1. 思路分析3.2. 代码实现 4. 单链表节点的删除4.1. 思路分析4.2. 代码实现 5. 单链表常见面试题5.1.…

常见面试题-MySQL的Explain执行计划

了解 Explain 执行计划吗&#xff1f; 答&#xff1a; explain 语句可以帮助我们查看查询语句的具体执行计划。 explain 查出来的各列含义如下&#xff1a; id&#xff1a;在一个大的查询语句中&#xff0c;每个 select 关键字都对应一个唯一的 id select_type&#xff1a;…

SpatialFeaturePlot画图是空的

stmeta.datadplyr::left_join(stmeta.data,coor[,c(3,7:8)],by"barcodes") SpatialFeaturePlot(st,features "test",images "P02") 做了上述操作之后画出的图是空的 原因&#xff0c;left_join之后自动把stmeta.data的行名变成了1&#xff0…