Docker 网络连接模式
网络模式介绍

Docker 的网络支持5种网络模式
none
bridge
container
host
network-name
查看默认的网络模式有三个
[root@ubuntu2404 ~]#docker network ls
NETWORK ID NAME DRIVER SCOPE
e1bc3b05a92a bridge bridge local
b2c5a9732ab3 host host local
eebec18c943b none null local
网络模式指定
默认新建的容器使用Bridge模式,创建容器时,docker run 命令使用以下选项指定网络模式。
格式
docker run –network <mode>
docker run –net=<mode>
–network network Connect a container to a network
–network-alias list Add network-scoped alias for the container
<mode>: 可是以下值
none
bridge
host
container:<容器名或容器ID>
<自定义网络名称>
Bridge网络模式
Bridge 网络模式架构

本模式是docker的默认模式,即不指定任何模式就是bridge模式,也是使用比较多的模式,此模式创建的容器会为每一个容器分配自己的网络 IP 等信息,并将容器连接到一个虚拟网桥与外界通信,可以和外部网络之间进行通信,通过SNAT访问外网,使用DNAT可以让容器被外部主机访问,所以此模式也称为NAT模式。
此模式宿主机需要启动ip_forward功能。
bridge网络模式特点
- 网络资源隔离:不同宿主机的容器无法直接通信,各自使用独立网络
- 无需手动配置:容器默认自动获取172.17.0.0/16的IP地址,此地址可以修改
- 可访问外网:利用宿主机的物理网卡,SNAT连接外网
- 外部主机无法直接访问容器:可以通过配置DNAT接受外网的访问
- 低性能较低:因为可通过NAT,网络转换带来更的损耗
- 端口管理繁琐:每个容器必须手动指定唯一的端口,容器产生端口冲容
Bridge 模式的默认设置
查看bridge模式的信息
[root@ubuntu2404 ~]#docker network inspect bridge
[
{
"Name": "bridge",
"Id": "e1bc3b05a92a0e4286c8668a63b7d1c6aa09d0daca0ce6e663edef4fd71d417d",
"Created": "2025-03-31T03:15:12.544277651Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"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": {},
"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": {}
}
]
宿主机网络状态
#安装docker后.默认启用ip_forward
[root@ubuntu2404 ~]#cat /proc/sys/net/ipv4/ip_forward
1
[root@ubuntu2404 ~]#iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 799 packets, 52077 bytes)
pkts bytes target prot opt in out source destination
52 2757 DOCKER 0 — * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1295 packets, 95266 bytes)
pkts bytes target prot opt in out source destination
0 0 DOCKER 0 — * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT 1396 packets, 101K bytes)
pkts bytes target prot opt in out source destination
95 6030 MASQUERADE 0 — * !docker0 172.17.0.0/16 0.0.0.0/0
3 202 MASQUERADE 0 — * !br0 192.168.100.0/24 0.0.0.0/0
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
8 480 RETURN 0 — docker0 * 0.0.0.0/0 0.0.0.0/0
通过宿主机的物理网卡利用SNAT访问外部网络
#在另一台主机上建立httpd服务器
[root@rocky8 ~]# yum instal -y httpd
[root@rocky8 ~]# systemctl restart httpd.service
[root@rocky8 ~]# echo web nginx >/var/www/html/index.html
[root@rocky8 ~]# curl 127.0.0.1
web nginx
#启动容器,默认是bridge网络模式
[root@ubuntu2404 ~]#docker run -it –rm alpine:latest sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if256: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether a2:fd:d2:9c:55:5b brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # ping 192.168.1.7
PING 192.168.1.7 (192.168.1.7): 56 data bytes
64 bytes from 192.168.1.7: seq=0 ttl=63 time=4.354 ms
64 bytes from 192.168.1.7: seq=1 ttl=63 time=0.893 ms
^C
— 192.168.1.7 ping statistics —
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.893/2.623/4.354 ms
/ # ping www.baidu.com
PING www.baidu.com (36.152.44.93): 56 data bytes
64 bytes from 36.152.44.93: seq=0 ttl=127 time=26.075 ms
64 bytes from 36.152.44.93: seq=1 ttl=127 time=25.746 ms
^C
— www.baidu.com ping statistics —
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 25.746/25.910/26.075 ms
/ # traceroute 192.168.1.7
traceroute to 192.168.1.7 (192.168.1.7), 30 hops max, 46 byte packets
1 172.17.0.1 (172.17.0.1) 0.010 ms 0.007 ms 0.012 ms
2 192.168.1.7 (192.168.1.7) 1.312 ms 0.243 ms 0.178 ms
/ # wget -qO – 192.168.1.100
web nginx
/ # wget -qO – 192.168.1.100
web nginx
/ #
[root@rocky8 ~]# tail /var/log/httpd/access_log
192.168.1.30 – – [01/Apr/2025:10:30:00 +0800] "GET / HTTP/1.1" 403 7620 "-" "curl/8.5.0"
192.168.1.30 – – [01/Apr/2025:10:31:14 +0800] "GET / HTTP/1.1" 200 10 "-" "curl/8.5.0"
127.0.0.1 – – [01/Apr/2025:10:32:14 +0800] "GET / HTTP/1.1" 200 10 "-" "curl/7.61.1"
192.168.1.30 – – [01/Apr/2025:10:32:57 +0800] "GET / HTTP/1.1" 200 10 "-" "Wget"
[root@rocky8 ~]# tail /var/log/httpd/access_log
192.168.1.30 – – [01/Apr/2025:10:30:00 +0800] "GET / HTTP/1.1" 403 7620 "-" "curl/8.5.0"
192.168.1.30 – – [01/Apr/2025:10:31:14 +0800] "GET / HTTP/1.1" 200 10 "-" "curl/8.5.0"
127.0.0.1 – – [01/Apr/2025:10:32:14 +0800] "GET / HTTP/1.1" 200 10 "-" "curl/7.61.1"
192.168.1.30 – – [01/Apr/2025:10:32:57 +0800] "GET / HTTP/1.1" 200 10 "-" "Wget"
192.168.1.30 – – [01/Apr/2025:10:33:24 +0800] "GET / HTTP/1.1" 200 10 "-" "Wget"
修改默认的 Bridge 模式网络配置
有两种方法修改默认的bridge 模式的网络配置,但两种方式只能选一种,否则会导致冲容,docker服务无法启动。
修改Bridge模式默认的网段方法1
[root@ubuntu2404 ~]#ip a
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 noprefixroute
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:0c:29:5c:92:54 brd ff:ff:ff:ff:ff:ff
altname enp2s1
altname ens33
inet 192.168.1.30/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe5c:9254/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 2e:79:73:c9:de:ec 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
inet6 fe80::2c79:73ff:fec9:deec/64 scope link
valid_lft forever preferred_lft forever
[root@ubuntu2404 ~]#docker run -it –rm alpine sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if258: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 32:fa:3d:f9:a0:a1 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # exit
[root@ubuntu2404 ~]#vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock
–bip=10.20.0.4/24
[root@ubuntu2404 ~]#systemctl daemon-reload
[root@ubuntu2404 ~]#systemctl restart docker.service
[root@ubuntu2404 ~]#ip a
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 noprefixroute
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:0c:29:5c:92:54 brd ff:ff:ff:ff:ff:ff
altname enp2s1
altname ens33
inet 192.168.1.30/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe5c:9254/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 2e:79:73:c9:de:ec brd ff:ff:ff:ff:ff:ff
inet 10.20.0.4/24 brd 10.20.0.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::2c79:73ff:fec9:deec/64 scope link
valid_lft forever preferred_lft forever
[root@ubuntu2404 ~]#docker run -it –rm alpine sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if260: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 82:6f:28:54:d9:c6 brd ff:ff:ff:ff:ff:ff
inet 10.20.0.1/24 brd 10.20.0.255 scope global eth0
valid_lft forever preferred_lft forever
/ # exit
[root@ubuntu2404 ~]#docker network inspect bridge
[
{
"Name": "bridge",
"Id": "89eced369c3751da1fa4e0d8564d56068531fc3fd02580428b56a322d93fa501",
"Created": "2025-04-01T02:42:52.341477406Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "10.20.0.0/24",
"Gateway": "10.20.0.4"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"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": {}
}
]
修改Bridge网络配置方法2
[root@ubuntu2404 ~]#vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://g5c737m4.mirror.aliyuncs.com","https://docker.1ms.run",
"https://docker.xuanyuan.me"],"bip":"192.168.100.5/24","fixed-cidr":"192.168.100.10/26","default-gateway":"192.168.100.200"
}
[root@ubuntu2404 ~]#systemctl restart docker
[root@ubuntu2404 ~]#ip a show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 2e:79:73:c9:de:ec brd ff:ff:ff:ff:ff:ff
inet 192.168.100.5/24 brd 192.168.100.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::2c79:73ff:fec9:deec/64 scope link
valid_lft forever preferred_lft forever
[root@ubuntu2404 ~]#docker run -it –rm alpine sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if262: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 46:f0:31:82:21:e2 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.1/24 brd 192.168.100.255 scope global eth0
valid_lft forever preferred_lft forever
/ # cat /etc/resolv.conf
nameserver 223.5.5.5
nameserver 223.6.6.6
nameserver 223.5.5.5
nameserver 223.6.6.6
search .
/ # route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.100.200 0.0.0.0 UG 0 0 0 eth0
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
/ # exit
[root@ubuntu2404 ~]#docker network inspect bridge
[
{
"Name": "bridge",
"Id": "4b7b24c3261f0632a2c4600ded44e900bb31e56cafd3656f0d00cd34f02bc8ba",
"Created": "2025-04-01T02:49:12.922712647Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "192.168.100.0/24",
"IPRange": "192.168.100.0/26",
"Gateway": "192.168.100.5",
"AuxiliaryAddresses": {
"DefaultGatewayIPv4": "192.168.100.200"
}
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"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": {}
}
]
Host模式

如果指定host模式启动的容器,那么新创建的容器不会创建自己的虚拟网卡,而是直接使用宿主机的网卡和IP地址,因此在容器里面查看到的IP信息就是宿主机的信息,访问容器的时候直接使用宿主机IP+容器端口即可,不过容器内除网络以外的其它资源,如:文件系统、系统进程等仍然和宿主机保持隔离。此模式由于直接使用宿主机的网络无需转换,网络性能最高,但是各容器内使用的端口不能相同,适用于运行容器端口比较固定的业务。
Host 网络模式特点
- 使用参数 –network host 指定
- 共享宿主机网络
- 各容器网络无隔离
- 网络性能无损耗
- 网络故障排除相对简单
- 容易产生端口冲突
- 网络资源无法分别统计
- 不支持端口映射
#查看宿主机的网络设置
[root@ubuntu2404 ~]#ip a
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 noprefixroute
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:0c:29:5c:92:54 brd ff:ff:ff:ff:ff:ff
altname enp2s1
altname ens33
inet 192.168.1.30/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe5c:9254/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 2e:79:73:c9:de:ec 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
inet6 fe80::2c79:73ff:fec9:deec/64 scope link
valid_lft forever preferred_lft forever
[root@ubuntu2404 ~]#route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.2 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
#打开容器前确认宿主机的80/tcp端口没有打开
[root@ubuntu2404 ~]#ss -ntl|grep 80
#创建host模式的容器
[root@ubuntu2404 ~]#docker run -d –network host –name web1 nginx-alpin:v1.2
8e47407bbffc83aa16985b08d99c281551cc2f1a703e39aba54e11346ebb8ade
#创建容器后,宿主机的80/tcp端口打开
[root@ubuntu2404 ~]#ss -ntlp|grep 80
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=241878,fd=6),("nginx",pid=241864,fd=6))
[root@ubuntu2404 ~]#docker exec -it web1 sh
/usr/local/src/nginx-1.26.3 # ip a
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 noprefixroute
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:0c:29:5c:92:54 brd ff:ff:ff:ff:ff:ff
altname enp2s1
altname ens33
inet 192.168.1.30/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe5c:9254/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 2e:79:73:c9:de:ec 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
inet6 fe80::2c79:73ff:fec9:deec/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
/usr/local/src/nginx-1.26.3 # hostname
ubuntu2404
/usr/local/src/nginx-1.26.3 # route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.2 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
#从容器访问远程主机
/usr/local/src/nginx-1.26.3 # curl 192.168.1.100
web1 nginx
/usr/local/src/nginx-1.26.3 # exit
#查看远程主机的访问日志
[root@rocky8 ~]# tail -f /var/log/httpd/access_log
192.168.1.30 – – [01/Apr/2025:11:05:54 +0800] "GET / HTTP/1.1" 200 11 "-" "curl/8.12.1"
192.168.1.30 – – [01/Apr/2025:11:06:16 +0800] "GET / HTTP/1.1" 200 11 "-" "curl/8.12.1"
#远程主机可以访问容器的web服务
[root@rocky8 ~]# curl 192.168.1.30
hello nginx-alpine
host模式下端口映射无法实现
[root@ubuntu2404 ~]#ss -ntl|grep 81
[root@ubuntu2404 ~]#docker run -d –network host –name web2 -p 81:80 nginx-alpin:v1.2
WARNING: Published ports are discarded when using host network mode
391b30b88886c21cf58b3b7f895446540fcc923f33bc1295d0b04890b6170c28
#host模块下端口映射不成功,但是容器可以启动
[root@ubuntu2404 ~]#docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
391b30b88886 nginx-alpin:v1.2 "nginx" 9 seconds ago Up 9 seconds web2
对比前面host模式的容器和bridge模式的端口映射
[root@ubuntu2404 ~]#docker port web2
[root@ubuntu2404 ~]#docker run -d –network bridge -p 8080:80 –name web3 nginx-alpin:v1.2
cedc560f48cd500598692e01a8c0fed3a1b454061ce9690cca0b96eb5e0d2276
[root@ubuntu2404 ~]#docker port web3
80/tcp –> 0.0.0.0:8080
80/tcp –> [::]:8080
None 模式
在使用 none 模式后,Docker 容器不会进行任何网络配置,没有网卡、没有IP也没有路由,因此默认无法与外界通信,需要手动添加网卡配置IP等,所以极少使用。
none模式特点
- 使用参数 –network none 指定
- 默认无网络功能,无法和外部通信
- 无法实现端口映射
- 适用于测试环境
启动none模式的容器
[root@ubuntu2404 ~]#docker run -d –network none -p 81:80 –name web1 nginx-alpin:v1.2
971f67cd31e90b9e27324b171035194ef18dc4d1ea14a94874329062032a870c
[root@ubuntu2404 ~]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
971f67cd31e9 nginx-alpin:v1.2 "nginx" 3 seconds ago Up 3 seconds web1
[root@ubuntu2404 ~]#docker port web1
[root@ubuntu2404 ~]#docker exec -it web1 sh
/usr/local/src/nginx-1.26.3 # ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
/usr/local/src/nginx-1.26.3 # route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
/usr/local/src/nginx-1.26.3 # netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
/usr/local/src/nginx-1.26.3 # ping www.baidu.com
ping: bad address 'www.baidu.com'
/usr/local/src/nginx-1.26.3 # ping 172.17.0.1
PING 172.17.0.1 (172.17.0.1): 56 data bytes
ping: sendto: Network unreachable
/usr/local/src/nginx-1.26.3 #
Container 模式

使用此模式创建的容器需指定和一个已经存在的容器共享一个网络,而不是和宿主机共享网络,新创建的容器不会创建自己的网卡也不会配置自己的IP,而是和一个被指定的已经存在的容器共享IP和端口范围,因此这个容器的端口不能和被指定容器的端口冲突,除了网络之外的文件系统、进程信息等仍然保持相互隔离,两个容器的进程可以通过lo网卡进行通信。
Container 模式特点
使用参数 –-network container:名称或ID指定
与宿主机网络空间隔离
空器间共享网络空间,直接使用对方的网络
第一个容器的网络可能是bridge,或none,或者host,而第二个容器模式依赖于第一个容器,它们共享网络。如果第一个容器停止,将导致无法创建第二个容器
第二个容器可以直接使用127.0.0.1访问第一个容器
适合频繁的容器间的网络通信
默认不支持端口映射,较少使用
通过容器模式实现 wordpress
[root@ubuntu2404 ~]#docker run -d -p 80:80 –name wordpress -v /data/wordpress:/var/www/html –restart=always wordpress:php7.4-apache
a1f348d1da629ad2be26d450cb13ea2fdb039feb04d60eac0c2fd15296735366
[root@ubuntu2404 ~]#docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1f348d1da62 wordpress:php7.4-apache "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, [::]:80->80/tcp wordpress
[root@ubuntu2404 ~]#docker run –network container:wordpress -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=123456 –name mysql -d -v /data/mysql:/var/lib/mysql –restart=always mysql:8.0.29-oracle
f840785ba8e5dd53cd97fa0e9a9c16f1631a50681751d6dda091bd82fd56c3cf
[root@ubuntu2404 ~]#docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f840785ba8e5 mysql:8.0.29-oracle "docker-entrypoint.s…" 3 seconds ago Up 2 seconds mysql
a1f348d1da62 wordpress:php7.4-apache "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp wordpress
#注意:数据库主机地址为127.0.0.1,不支持localhost

实现LNMP的Wordpress
#准备配置文件
[root@ubuntu2404 ~]#cat caoge.conf
server {
listen 80;
server_name www.cao.com;
root /var/www/html;
index index.php index.html index.htm;
client_max_body_size 100m;
location ~ \\.php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[root@ubuntu2404 ~]#docker run -d -p 80:80 –name wordpress -v /data/www:/var/www/html -v /data/nginx/conf.d/:/apps/nginx/conf/conf.d/ nginx-alpin:v1.1
[root@ubuntu2404 ~]#docker run –name php-fpm –network container:wordpress -d -v /data/www:/var/www/html wordpress:php7.4-apache
[root@ubuntu2404 ~]#docker run –name mysql –network container:wordpress -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=123456 -d -v /data/mysql:/var/lib/mysql –restart=always mysql:8.0.29-oracle
通过容器模式实现LNP架构
#准备nginx连接php-fpm的配置文件
[root@ubuntu2404 ~]#cat caoge.conf
server {
listen 80;
server_name www.cao.com;
root /var/www/html;
index index.php ;
location ~ \\.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[root@ubuntu2404 ~]#cat index.php
<?php
phpinfo();
?>
#启动nginx
[root@ubuntu2404 ~]# docker run -d –name nginx -v
/data/nginx/conf.d/:/etc/nginx/conf.d/
-v /data/nginx/html:/usr/share/nginx/html -p 80:80 nginx:1.26
#启动php-fpm
[root@ubuntu2404 ~]# docker run -d –network container:nginx –name php-fpm
-v /data/nginx/html/:/usr/share/nginx/html php:8.1-fpm
#注意:php:8.1-fpm镜像缺少连接数据库的相关包,无法直接连接MySQL
#创建第一个容器
[root@ubuntu2404 ~]#docker run -it –name web1 -p 80:80 alpine:latest sh
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 7E:2C:A4:F3:79:99
inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:736 (736.0 B) TX bytes:126 (126.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ # netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
#在另一个终端执行下面操作
[root@ubuntu2404 ~]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c68a4e49e6f8 alpine:latest "sh" 20 seconds ago Up 20 seconds 0.0.0.0:80->80/tcp, [::]:80->80/tcp web1
[root@ubuntu2404 ~]#docker port web1
80/tcp –> 0.0.0.0:80
80/tcp –> [::]:80
#无法访问web服务
[root@ubuntu2404 ~]#curl 127.0.0.1
curl: (56) Recv failure: Connection reset by peer
#创建第二个容器,基于第一个容器的container的网络模式
[root@ubuntu2404 ~]#docker run -d –name web2 –network container:web1 nginx-centos7:v1.4
32a75e73f37a59fbbfae31cc8112808c493fdf03a54c99b0457782b1c65a89d7
#可以访问web服务
[root@ubuntu2404 ~]#curl 127.0.0.1
hello nginx
[root@ubuntu2404 ~]#docker exec -it web2 bash
#可以访问外网
[root@c68a4e49e6f8 /]# ping www.baidu.com
PING www.a.shifen.com (36.152.44.132) 56(84) bytes of data.
64 bytes from 36.152.44.132 (36.152.44.132): icmp_seq=1 ttl=127 time=24.9 ms
64 bytes from 36.152.44.132 (36.152.44.132): icmp_seq=2 ttl=127 time=23.6 ms
^C
— www.a.shifen.com ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 23.613/24.292/24.971/0.679 ms
[root@c68a4e49e6f8 /]#
第一个容器使用host网络模式,第二个容器与之共享网络
[root@ubuntu2404 ~]#docker run -it -d –name web3 –network host
[root@ubuntu2404 ~]#docker run -it –name web4 –network container:web3 nginx-ubuntu:v1.1
第一个容器使用none网络模式,第二个容器与之共享网络
[root@ubuntu2404 ~]#docker run -d –name c1 –network none nginx-centos7:v1.4
3783acc5a7d28e1a2d669128384f5451923b71c0b61d083c7b1f9a3aa59cae3a
[root@ubuntu2404 ~]#docker run -it –name c2 –network container:c1 centos:7
自定义网络模式
除了以上的网络模式,也可以自定义网络,使用自定义的网段地址,网关等信息可以使用自定义网络模式,实现不同集群应用的独立网络管理,而互不影响,而且在网一个网络内,可以直接利用容器名相互访问,非常便利。
注意:自定义网络内的容器可以直接通过容器名进行相互的访问,而无需使用 –link
自定义网络实现。
[root@ubuntu2404 ~]#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 create -d <mode> –subnet <CIDR> –gateway <网关> <自定义网络名称>
#注意mode不支持host和none,默认是bridge模式
-d <mode> 可省略,默认为bridg
查看自定义网络信息
docker network inspect <自定义网络名称或网络ID>
删除自定义网络
doccker network rm <自定义网络名称或网络ID>
内置的三个网络无法删除
[root@ubuntu2404 ~]#docker network ls
NETWORK ID NAME DRIVER SCOPE
ed42d8074a63 bridge bridge local
b2c5a9732ab3 host host local
eebec18c943b none null local
[root@ubuntu2404 ~]#docker network rm host
Error response from daemon: host is a pre-defined network and cannot be removed
exit status 1
[root@ubuntu2404 ~]#docker network rm bridge
Error response from daemon: bridge is a pre-defined network and cannot be removed
exit status 1
[root@ubuntu2404 ~]#docker network rm none
Error response from daemon: none is a pre-defined network and cannot be removed
exit status 1
实战案例:自定义网络
创建自定义的网络
[root@ubuntu2404 ~]#docker network create -d bridge –subnet 172.28.0.0/16 –gateway 172.28.0.1 test-net
ee1f98fe8eb4baf8964404240c9c3b035ae1a8b99fe250d7a5ec4e4d3fe72ba3
[root@ubuntu2404 ~]#docker network ls
NETWORK ID NAME DRIVER SCOPE
ed42d8074a63 bridge bridge local
b2c5a9732ab3 host host local
eebec18c943b none null local
ee1f98fe8eb4 test-net bridge local
[root@ubuntu2404 ~]#docker inspect test-net
[
{
"Name": "test-net",
"Id": "ee1f98fe8eb4baf8964404240c9c3b035ae1a8b99fe250d7a5ec4e4d3fe72ba3",
"Created": "2025-04-01T07:47:33.637162565Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.28.0.0/16",
"Gateway": "172.28.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
[root@ubuntu2404 ~]#ip a
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 noprefixroute
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:0c:29:5c:92:54 brd ff:ff:ff:ff:ff:ff
altname enp2s1
altname ens33
inet 192.168.1.30/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe5c:9254/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 2e:79:73:c9:de:ec 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
inet6 fe80::2c79:73ff:fec9:deec/64 scope link
valid_lft forever preferred_lft forever
#新添加的虚拟网卡
272: br-ee1f98fe8eb4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 4a:5d:83:66:81:7c brd ff:ff:ff:ff:ff:ff
inet 172.28.0.1/16 brd 172.28.255.255 scope global br-ee1f98fe8eb4
valid_lft forever preferred_lft forever
#新加了一个网桥
[root@ubuntu2404 ~]#brctl show
bridge namebridge idSTP enabledinterfaces
br-ee1f98fe8eb48000.4a5d8366817cno
docker08000.2e7973c9deecno
[root@ubuntu2404 ~]#route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.2 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.28.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-ee1f98fe8eb4
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
利用自定义的网络创建容器
[root@ubuntu2404 ~]#docker run -it –rm –network test-net alpine:latest sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if273: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:f9:dc:5a:de:7a brd ff:ff:ff:ff:ff:ff
inet 172.28.0.2/16 brd 172.28.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.28.0.1 0.0.0.0 UG 0 0 0 eth0
172.28.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
/ # cat /etc/resolv.conf
# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.
nameserver 127.0.0.11
search .
options edns0 trust-ad ndots:0
# Based on host file: '/etc/resolv.conf' (internal resolver)
# ExtServers: [host(127.0.0.53)]
# Overrides: []
# Option ndots from: internal
/ # ping -c1 www.baidu.com
PING www.baidu.com (36.152.44.132): 56 data bytes
64 bytes from 36.152.44.132: seq=0 ttl=127 time=24.517 ms
— www.baidu.com ping statistics —
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 24.517/24.517/24.517 ms
/ #
#再开一个新终端窗口查看网络
[root@ubuntu2404 ~]#docker inspect test-net
[
{
"Name": "test-net",
"Id": "ee1f98fe8eb4baf8964404240c9c3b035ae1a8b99fe250d7a5ec4e4d3fe72ba3",
"Created": "2025-04-01T07:47:33.637162565Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.28.0.0/16",
"Gateway": "172.28.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
#出现此网络中容器的网络信息
"Containers": {
"788a76e4b7a1a2f7d8b288df670d086d74a07075109b96150054b218b7e4af20": {
"Name": "nifty_cerf",
"EndpointID": "212201c9fb8b2c3deb1229d2ab5ee2124a2cc7ccb9d3c3c437f540cd9233591b",
"MacAddress": "02:f9:dc:5a:de:7a",
"IPv4Address": "172.28.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
实战案例:自定义网络中的容器之间通信
[root@ubuntu2404 ~]#docker network ls
NETWORK ID NAME DRIVER SCOPE
ed42d8074a63 bridge bridge local
b2c5a9732ab3 host host local
eebec18c943b none null local
ee1f98fe8eb4 test-net bridge local
[root@ubuntu2404 ~]#docker run -it –rm –network test-net alpine:latest sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if275: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 86:25:c4:e8:48:89 brd ff:ff:ff:ff:ff:ff
inet 172.28.0.2/16 brd 172.28.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # cat /etc/hosts
127.0.0.1localhost
::1localhost ip6-localhost ip6-loopback
fe00::ip6-localnet
ff00::ip6-mcastprefix
ff02::1ip6-allnodes
ff02::2ip6-allrouters
172.28.0.23dbe542f327c
#再创建新容器后便可访问
/ # ping -c1 0bd8c3ba7954
PING 0bd8c3ba7954 (172.28.0.3): 56 data bytes
64 bytes from 172.28.0.3: seq=0 ttl=64 time=0.844 ms
— 0bd8c3ba7954 ping statistics —
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.844/0.844/0.844 ms
[root@ubuntu2404 ~]#docker run -it –rm –network test-net alpine:latest sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if276: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 96:e7:25:79:90:81 brd ff:ff:ff:ff:ff:ff
inet 172.28.0.3/16 brd 172.28.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # cat /etc/hosts
127.0.0.1localhost
::1localhost ip6-localhost ip6-loopback
fe00::ip6-localnet
ff00::ip6-mcastprefix
ff02::1ip6-allnodes
ff02::2ip6-allrouters
172.28.0.30bd8c3ba7954
/ # ping -c1 3dbe542f327c
PING 3dbe542f327c (172.28.0.2): 56 data bytes
64 bytes from 172.28.0.2: seq=0 ttl=64 time=0.272 ms
— 3dbe542f327c ping statistics —
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.272/0.272/0.272 ms
结论:自定义网络中的容器之间可以直接利用容器名进行通信
实战案例:利用自定义网络实现 WordPress
[root@ubuntu2404 ~]# docker network create -d bridge –subnet 172.27.0.0/16 –gateway 172.27.0.1 bridge2
[root@ubuntu2404 ~]# docker run -d -p 8080:80 –network bridge2 –name wordpress2
-v /data/wordpress2:/var/www/html –restart=always wordpress:php7.4-apache
[root@ubuntu2404 ~]#docker run –network bridge2 -e MYSQL_ROOT_PASSWORD=123456
-e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=123456
–name mysql2 -d -v /data/mysql2:/var/lib/mysql –restart=always mysql:8.0.29-oracle
#wordpress连接数据库时,数据库主机是容器的名称mysql2
实战案例:利用自定义网络实现 Redis Cluster

创建自定义网络
[root@ubuntu2404 ~]#docker network create net-redis –subnet 172.19.0.0/16
c34e575b64e8d1975eecb5b50f6487a20e4fa47dddd4a811bb0388771c259469
[root@ubuntu2404 ~]#docker inspect net-redis
[
{
"Name": "net-redis",
"Id": "c34e575b64e8d1975eecb5b50f6487a20e4fa47dddd4a811bb0388771c259469",
"Created": "2025-08-06T22:41:49.373143204+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.19.0.0/16"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
创建6个redis容器配置
[root@ubuntu2404 ~]#cat create.sh
#!/bin/bash
for port in {1..6};do
mkdir -p /data/redis/node-${port}/conf
cat >> /data/redis/node-${port}/conf/redis.conf << EOF
port 6379
bind 0.0.0.0
masterauth 123456
requirepass 123456
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.19.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
[root@ubuntu2404 ~]#bash create.sh
[root@ubuntu2404 ~]#tree /data/redis/
/data/redis/
├── node-1
│ └── conf
│ └── redis.conf
├── node-2
│ └── conf
│ └── redis.conf
├── node-3
│ └── conf
│ └── redis.conf
├── node-4
│ └── conf
│ └── redis.conf
├── node-5
│ └── conf
│ └── redis.conf
└── node-6
└── conf
└── redis.conf
13 directories, 6 files
[root@ubuntu2404 ~]#cat /data/redis/node-1/conf/redis.conf
port 6379
bind 0.0.0.0
masterauth 123456
requirepass 123456
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.19.0.11
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
[root@ubuntu2404 ~]#
创建6个redis容器
[root@ubuntu2404 ~]#cat docker_redis.sh
#!/bin/bash
for port in {1..6};do
docker run -p 637${port}:6379 -p 1667${port}:16379 –name redis-${port} \\
-v /data/redis/node-${port}/data:/data \\
-v /data/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \\
-d –net net-redis –ip 172.19.0.1${port} redis:8.2.0-alpine3.22 redis-server /etc/redis/redis.conf
done
[root@ubuntu2404 ~]#bash docker_redis.sh
Unable to find image 'redis:8.2.0-alpine3.22' locally
8.2.0-alpine3.22: Pulling from library/redis
9824c27679d3: Pull complete
97065d8f4164: Pull complete
dc8b9e3ff4af: Pull complete
fd6a186858e3: Pull complete
3e1be1ab9e57: Pull complete
4f4fb700ef54: Pull complete
eaea4f58fa7c: Pull complete
Digest: sha256:c5c1179319b700a8f0436de4cda3099a0cdda93961042d54cc7ee1181a5a7510
Status: Downloaded newer image for redis:8.2.0-alpine3.22
afcb942a2ecc64b94a2b3dd80796772363ecff99943bf3850fdb69ae5525aed0
f43828d8581936d8dae63311c1257be01ac44d9d73e5713c5fbd4976b9c25560
daf995eed129acc9100b899858b0b9a60e76745942b8e6eee02979ff347468ce
05acf7a0bff9eeddd8633e20b5e443828f30c60634ff91458580cddffa15ebc7
8adecb774c1aa7a051e60ef1a410e8c680ec68e627abfb2cd2c916d92193fe7d
eb5594d79f303f5c63be53b46dfb70ba7fafc462ec40b9b738648213f4e2246c
[root@ubuntu2404 ~]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb5594d79f30 redis:8.2.0-alpine3.22 "docker-entrypoint.s…" 7 seconds ago Up 7 seconds 0.0.0.0:6376->6379/tcp, [::]:6376->6379/tcp, 0.0.0.0:16676->16379/tcp, [::]:16676->16379/tcp redis-6
8adecb774c1a redis:8.2.0-alpine3.22 "docker-entrypoint.s…" 8 seconds ago Up 7 seconds 0.0.0.0:6375->6379/tcp, [::]:6375->6379/tcp, 0.0.0.0:16675->16379/tcp, [::]:16675->16379/tcp redis-5
05acf7a0bff9 redis:8.2.0-alpine3.22 "docker-entrypoint.s…" 8 seconds ago Up 7 seconds 0.0.0.0:6374->6379/tcp, [::]:6374->6379/tcp, 0.0.0.0:16674->16379/tcp, [::]:16674->16379/tcp redis-4
daf995eed129 redis:8.2.0-alpine3.22 "docker-entrypoint.s…" 8 seconds ago Up 8 seconds 0.0.0.0:6373->6379/tcp, [::]:6373->6379/tcp, 0.0.0.0:16673->16379/tcp, [::]:16673->16379/tcp redis-3
f43828d85819 redis:8.2.0-alpine3.22 "docker-entrypoint.s…" 9 seconds ago Up 8 seconds 0.0.0.0:6372->6379/tcp, [::]:6372->6379/tcp, 0.0.0.0:16672->16379/tcp, [::]:16672->16379/tcp redis-2
afcb942a2ecc redis:8.2.0-alpine3.22 "docker-entrypoint.s…" 9 seconds ago Up 9 seconds 0.0.0.0:6371->6379/tcp, [::]:6371->6379/tcp, 0.0.0.0:16671->16379/tcp, [::]:16671->16379/tcp redis-1
[root@ubuntu2404 ~]#
创建 redis cluster
[root@ubuntu2404 ~]#docker exec -it redis-1 /bin/sh
/data # redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> exit
/data # redis-cli -a 123456 –cluster create 172.19.0.11:6379 172.19.0.12:6379 172.19.0.13:6379 172.19.0.14:6379 172.19.0.15:6379 172.19.0.16:63
79 –cluster-replicas 1
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] –> Slots 0 – 5460
Master[1] –> Slots 5461 – 10922
Master[2] –> Slots 10923 – 16383
Adding replica 172.19.0.15:6379 to 172.19.0.11:6379
Adding replica 172.19.0.16:6379 to 172.19.0.12:6379
Adding replica 172.19.0.14:6379 to 172.19.0.13:6379
M: d71835facc614a79e4c3b50fce82c1469cbe27c7 172.19.0.11:6379
slots:[0-5460] (5461 slots) master
M: ea11a85442c2bd6fce6664655c6dba5d6c409473 172.19.0.12:6379
slots:[5461-10922] (5462 slots) master
M: ef8ca2773b02fa5ef0897588ad6fde8aaa6716a1 172.19.0.13:6379
slots:[10923-16383] (5461 slots) master
S: 5604e41c3fd01d9c5eb4de8a248dca70800d468c 172.19.0.14:6379
replicates ef8ca2773b02fa5ef0897588ad6fde8aaa6716a1
S: 6f5a33b963483967cea367086f2de038b50b0de3 172.19.0.15:6379
replicates d71835facc614a79e4c3b50fce82c1469cbe27c7
S: 0fd8eeb82a75463d3b171101e0b58f71920f9b3a 172.19.0.16:6379
replicates ea11a85442c2bd6fce6664655c6dba5d6c409473
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 172.19.0.11:6379)
M: d71835facc614a79e4c3b50fce82c1469cbe27c7 172.19.0.11:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 5604e41c3fd01d9c5eb4de8a248dca70800d468c 172.19.0.14:6379
slots: (0 slots) slave
replicates ef8ca2773b02fa5ef0897588ad6fde8aaa6716a1
S: 0fd8eeb82a75463d3b171101e0b58f71920f9b3a 172.19.0.16:6379
slots: (0 slots) slave
replicates ea11a85442c2bd6fce6664655c6dba5d6c409473
M: ea11a85442c2bd6fce6664655c6dba5d6c409473 172.19.0.12:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
M: ef8ca2773b02fa5ef0897588ad6fde8aaa6716a1 172.19.0.13:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 6f5a33b963483967cea367086f2de038b50b0de3 172.19.0.15:6379
slots: (0 slots) slave
replicates d71835facc614a79e4c3b50fce82c1469cbe27c7
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
/data #
测试访问 redis cluster
/data # redis-cli -a 123456 -c
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> CLUSTER info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:159
cluster_stats_messages_pong_sent:163
cluster_stats_messages_sent:322
cluster_stats_messages_ping_received:158
cluster_stats_messages_pong_received:159
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:322
total_cluster_links_buffer_limit_exceeded:0
127.0.0.1:6379> cluster nodes
5604e41c3fd01d9c5eb4de8a248dca70800d468c 172.19.0.14:6379@16379 slave ef8ca2773b02fa5ef0897588ad6fde8aaa6716a1 0 1754492328376 3 connected
0fd8eeb82a75463d3b171101e0b58f71920f9b3a 172.19.0.16:6379@16379 slave ea11a85442c2bd6fce6664655c6dba5d6c409473 0 1754492330000 2 connected
d71835facc614a79e4c3b50fce82c1469cbe27c7 172.19.0.11:6379@16379 myself,master – 0 0 1 connected 0-5460
ea11a85442c2bd6fce6664655c6dba5d6c409473 172.19.0.12:6379@16379 master – 0 1754492329000 2 connected 5461-10922
ef8ca2773b02fa5ef0897588ad6fde8aaa6716a1 172.19.0.13:6379@16379 master – 0 1754492328000 3 connected 10923-16383
6f5a33b963483967cea367086f2de038b50b0de3 172.19.0.15:6379@16379 slave d71835facc614a79e4c3b50fce82c1469cbe27c7 0 1754492329088 1 connected
127.0.0.1:6379> set name cao
–> Redirected to slot [5798] located at 172.19.0.12:6379
OK
172.19.0.12:6379> set title cto
–> Redirected to slot [2217] located at 172.19.0.11:6379
OK
172.19.0.11:6379> get name
–> Redirected to slot [5798] located at 172.19.0.12:6379
"cao"
172.19.0.12:6379> get title
–> Redirected to slot [2217] located at 172.19.0.11:6379
"cto"
172.19.0.11:6379>
测试故障实现 redis cluster 高可用性
#模拟redis-2故障
[root@ubuntu2404 ~]#docker stop redis-2
redis-2
#再次查看cluster状态,可以看到redis-2出错
[root@ubuntu2404 ~]#docker exec -it redis-1 /bin/sh
/data # redis-cli -a 123456 –cluster check 127.0.0.1:6379
#查看到 172.19.0.16提升为新的master
127.0.0.1:6379 (d71835fa...) –> 1 keys | 5461 slots | 1 slaves.
172.19.0.16:6379 (0fd8eeb8...) –> 1 keys | 5462 slots | 0 slaves.
172.19.0.13:6379 (ef8ca277...) –> 0 keys | 5461 slots | 1 slaves.
[OK] 2 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:6379)
M: d71835facc614a79e4c3b50fce82c1469cbe27c7 127.0.0.1:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 5604e41c3fd01d9c5eb4de8a248dca70800d468c 172.19.0.14:6379
slots: (0 slots) slave
replicates ef8ca2773b02fa5ef0897588ad6fde8aaa6716a1
M: 0fd8eeb82a75463d3b171101e0b58f71920f9b3a 172.19.0.16:6379
slots:[5461-10922] (5462 slots) master
M: ef8ca2773b02fa5ef0897588ad6fde8aaa6716a1 172.19.0.13:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 6f5a33b963483967cea367086f2de038b50b0de3 172.19.0.15:6379
slots: (0 slots) slave
replicates d71835facc614a79e4c3b50fce82c1469cbe27c7
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
/data # redis-cli -a 123456 -c
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> cluster nodes
5604e41c3fd01d9c5eb4de8a248dca70800d468c 172.19.0.14:6379@16379 slave ef8ca2773b02fa5ef0897588ad6fde8aaa6716a1 0 1754492706556 3 connected
0fd8eeb82a75463d3b171101e0b58f71920f9b3a 172.19.0.16:6379@16379 master – 0 1754492707000 7 connected 5461-10922
d71835facc614a79e4c3b50fce82c1469cbe27c7 172.19.0.11:6379@16379 myself,master – 0 0 1 connected 0-5460
ea11a85442c2bd6fce6664655c6dba5d6c409473 172.19.0.12:6379@16379 master,fail – 1754492563550 1754492561000 2 connected
ef8ca2773b02fa5ef0897588ad6fde8aaa6716a1 172.19.0.13:6379@16379 master – 0 1754492706660 3 connected 10923-16383
6f5a33b963483967cea367086f2de038b50b0de3 172.19.0.15:6379@16379 slave d71835facc614a79e4c3b50fce82c1469cbe27c7 0 1754492707576 1 connected
127.0.0.1:6379> get name
–> Redirected to slot [5798] located at 172.19.0.16:6379
"cao"
172.19.0.16:6379> get title
–> Redirected to slot [2217] located at 172.19.0.11:6379
"cto"
172.19.0.11:6379>
同一个宿主机之间不同网络的容器通信
开两个容器,一个使用自定义网络容器,一个使用默认brideg网络的容器,默认因iptables规则导致无法通信。

[root@ubuntu2404 ~]#docker run -it –name alpine –rm alpine:3.3 sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if41: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 8e:6b:90:68:5e:c5 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # ping 172.28.0.2无法ping通自定义网络容器
PING 172.27.0.2 (172.27.0.2): 56 data bytes
^C
— 172.27.0.2 ping statistics —
3 packets transmitted, 0 packets received, 100% packet loss
/ #
[root@ubuntu2404 ~]#docker network create -d bridge –subnet 172.28.0.0/16 –gateway 172.28.0.1 test-net
1f8c39b04b9fd85d712f709593796bcaf5761e3fd89084263958195b15a16ff5
[root@ubuntu2404 ~]#docker run -it –name alpine1 –network test-net –rm alpine:3.3 sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if43: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 4e:17:de:ed:ea:b8 brd ff:ff:ff:ff:ff:ff
inet 172.28.0.2/16 brd 172.28.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # ping 172.17.0.2无法ping 通默认的网络容器
PING 172.17.0.2 (172.17.0.2): 56 data bytes
^C
— 172.17.0.2 ping statistics —
2 packets transmitted, 0 packets received, 100% packet loss
/ #
实战案例:通过解决docker network connect 实现同一个宿主机不同网络的容器间通信
可以使用docker network connect命令实现同一个宿主机不同网络的容器间相互通信
[root@ubuntu2404 ~]#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
–gw-priority int Highest gw-priority provides the default gateway. Accepts positive and negative values.
–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
[root@ubuntu2404 ~]#
#将CONTAINER与指定的NETWORK断开连接,使此CONTAINER可以与CONTAINER中的其它容器进行无法通信
#如果将容器从自定义的网络删除,将加入默认的网络,即docker0网桥中,获取172.17.0.0/16
#如果将容器从默认的网络docker0删除,将加入none网络
#每个网络中有属于此网络的容器信息
[root@ubuntu2404 ~]#docker inspect alpine
[
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"MacAddress": "8e:6b:90:68:5e:c5",
"DriverOpts": null,
"GwPriority": 0,
"NetworkID": "eba7d6bad68edc330355941d613932547493bea3effda1f38142dcf21ab0ed40",
"EndpointID": "8ab93f41b50bc7c153e43a952c52eedc774bbcbc8632887e2e9a318b8b6d4a8c",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"DNSNames": null
}
}
}
}
]
[root@ubuntu2404 ~]#docker inspect alpine1
[
"Networks": {
"test-net": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"MacAddress": "9a:7f:bc:9f:26:17",
"DriverOpts": null,
"GwPriority": 0,
"NetworkID": "1f8c39b04b9fd85d712f709593796bcaf5761e3fd89084263958195b15a16ff5",
"EndpointID": "786f04743271b83778b48b34197d576608e30963e286104d521ee8a28c8604f5",
"Gateway": "172.28.0.1",
"IPAddress": "172.28.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"DNSNames": [
"alpine1",
"03202856d9ec"
]
}
}
}
}
]
[root@ubuntu2404 ~]#
让默认网络中容器 alpine 可以连通自定义网络test-net的容器 alpine2
[root@ubuntu2404 ~]#docker network connect test-net alpine
[root@ubuntu2404 ~]#docker network inspect test-net
[
{
"Name": "test-net",
"Id": "1f8c39b04b9fd85d712f709593796bcaf5761e3fd89084263958195b15a16ff5",
"Created": "2025-08-06T23:23:11.184085114+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.28.0.0/16",
"Gateway": "172.28.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"03202856d9ec0c4ade9ae1ceda1a940b70f81baa71a77ec23bd78e7fd324b0c3": {
"Name": "alpine1",
"EndpointID": "786f04743271b83778b48b34197d576608e30963e286104d521ee8a28c8604f5",
"MacAddress": "9a:7f:bc:9f:26:17",
"IPv4Address": "172.28.0.2/16",
"IPv6Address": ""
},
"da3f2a4d64c2bbb5532be18b0df6e355468f5b0c4d8165f39a9a9088f0cc34ae": {
"Name": "alpine",
"EndpointID": "b6b0b8bdaae01eac5008660222a28276f440065d0c5472558c9b2034e774349e",
"MacAddress": "02:8a:e6:8d:fb:bf",
"IPv4Address": "172.28.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
[root@ubuntu2404 ~]#
#在alpine容器中可以看到新添加了一个网卡,并且分配了test-net网络的IP信息
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if41: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 8e:6b:90:68:5e:c5 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
3: eth1@if48: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:8a:e6:8d:fb:bf brd ff:ff:ff:ff:ff:ff
inet 172.28.0.3/16 brd 172.28.255.255 scope global eth1
valid_lft forever preferred_lft forever
#alpine可以连接alpine1容器
/ # ping 172.28.0.2
PING 172.28.0.2 (172.28.0.2): 56 data bytes
64 bytes from 172.28.0.2: seq=0 ttl=64 time=10.482 ms
64 bytes from 172.28.0.2: seq=1 ttl=64 time=0.088 ms
^C
— 172.28.0.2 ping statistics —
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.088/5.285/10.482 ms
#在alpine1容器中没有变化,仍然无法连接alpine
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if47: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 9a:7f:bc:9f:26:17 brd ff:ff:ff:ff:ff:ff
inet 172.28.0.2/16 brd 172.28.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
^C
— 172.17.0.2 ping statistics —
2 packets transmitted, 0 packets received, 100% packet loss
让自定义网络中容器 alpine1 可以连通默认网络的容器 alpine
#将自定义网络中的容器alpine1也加入到默认网络中,使之和默认网络中的容器alpine通信
[root@ubuntu2404 ~]#docker network connect bridge alpine1
[root@ubuntu2404 ~]#docker network inspect bridge
[
{
"Name": "bridge",
"Id": "eba7d6bad68edc330355941d613932547493bea3effda1f38142dcf21ab0ed40",
"Created": "2025-08-03T20:38:06.886042098+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"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": {
"03202856d9ec0c4ade9ae1ceda1a940b70f81baa71a77ec23bd78e7fd324b0c3": {
"Name": "alpine1",
"EndpointID": "ed6255ef75238027e393e840db0ddb35cfbae038eb96ad4bf012b00ac411263e",
"MacAddress": "da:5c:12:47:57:f2",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
},
"da3f2a4d64c2bbb5532be18b0df6e355468f5b0c4d8165f39a9a9088f0cc34ae": {
"Name": "alpine",
"EndpointID": "8ab93f41b50bc7c153e43a952c52eedc774bbcbc8632887e2e9a318b8b6d4a8c",
"MacAddress": "8e:6b:90:68:5e:c5",
"IPv4Address": "172.17.0.2/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": {}
}
]
#确认自定义网络的容器alpine1中添加了新网卡,并设置默认网络的IP信息
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if47: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 9a:7f:bc:9f:26:17 brd ff:ff:ff:ff:ff:ff
inet 172.28.0.2/16 brd 172.28.255.255 scope global eth0
valid_lft forever preferred_lft forever
3: eth1@if49: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether da:5c:12:47:57:f2 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth1
valid_lft forever preferred_lft forever
#alpine1可以连接alpine容器
/ # ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=1.907 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.251 ms
^C
— 172.17.0.2 ping statistics —
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.251/1.079/1.907 ms
#在alpine中可以利用alpine1容器名通信
/ # ping alpine1
PING alpine1 (172.28.0.2): 56 data bytes
64 bytes from 172.28.0.2: seq=0 ttl=64 time=0.068 ms
64 bytes from 172.28.0.2: seq=1 ttl=64 time=0.314 ms
^C
— alpine1 ping statistics —
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.068/0.191/0.314 ms
#在alpine1中可以利用alpine容器名通信
/ # ping alpine
PING alpine (172.28.0.3): 56 data bytes
64 bytes from 172.28.0.3: seq=0 ttl=64 time=0.344 ms
64 bytes from 172.28.0.3: seq=1 ttl=64 time=0.094 ms
^C
— alpine ping statistics —
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.094/0.219/0.344 ms
断开不同网络中容器的通信
#将alpine断开和网络test-net中其它容器的通信
[root@ubuntu2404 ~]#docker network disconnect test-net alpine
#在容器alpine中无法和alpine1通信
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if41: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 8e:6b:90:68:5e:c5 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # ping 172.28.0.2
PING 172.28.0.2 (172.28.0.2): 56 data bytes
^C
— 172.28.0.2 ping statistics —
3 packets transmitted, 0 packets received, 100% packet loss
#在容器alpine1仍能alpine通信
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if47: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 9a:7f:bc:9f:26:17 brd ff:ff:ff:ff:ff:ff
inet 172.28.0.2/16 brd 172.28.255.255 scope global eth0
valid_lft forever preferred_lft forever
3: eth1@if49: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether da:5c:12:47:57:f2 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth1
valid_lft forever preferred_lft forever
/ # ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.168 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.073 ms
^C
— 172.17.0.2 ping statistics —
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.073/0.120/0.168 ms
/ #
#将alpine1 断开和默认网络中其它容器的通信
[root@ubuntu2404 ~]#docker network disconnect bridge alpine1
#在容器alpine1中无法和alpine通信
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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@if47: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 9a:7f:bc:9f:26:17 brd ff:ff:ff:ff:ff:ff
inet 172.28.0.2/16 brd 172.28.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # ping -c1 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
— 172.17.0.2 ping statistics —
1 packets transmitted, 0 packets received, 100% packet loss


