1. 常见的容器之间通信方式

1.1. 同一个宿主机内部

  • 通过虚拟交换机来实现容器间通信

network - 图1

  • 如果容器在不同的虚拟交换机上,则可以通过交换机直连或者路由转发的方式通信

network - 图2

1.2. 跨宿主机的容器通信

  • 通过桥接宿主机网卡的方式通信

network - 图3

  • NAT转发(docker默认的方式)

network - 图4

  • 叠加式网络(Overlay network)

network - 图5

2. Docker网络模型

network - 图6

  1. 封闭式容器(none)

仅有一个lo口的容器,一般用于内部的数据处理等任务,而不需要与外界进行通信的容器。

  1. 桥接式容器(Bridge,default)

每个容器在创建之初就分配了私有地址和lo口,其中私有地址接在docker的虚拟桥上,可以通过NAT方式与外界通信,这是默认的网络模型。

  1. 联盟式容器(Joined)

多个容器共用同一个Net名称空间,而其它名称空间是私有的,这些容器内部可以通过lo口直接通信,而不需要走docker桥。

  1. 开放式容器(Open)

开放式容器是联盟式容器的一种特例,此容器共享的是宿主机的网卡

3. 案例

3.1 Docker 容器网络信息查看

[root@centos-82 ~]# ip link show

  1. ## veth3c68900@if4 一半在docker0上,一半在容器中。master接口是 docker0
  2. ......
  3. 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
  4. link/ether 02:42:86:d7:21:83 brd ff:ff:ff:ff:ff:ff
  5. 5: veth3c68900@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default
  6. link/ether 26:62:60:c8:23:f6 brd ff:ff:ff:ff:ff:ff link-netnsid 0

[root@centos-82 ~]# docker network ls

  1. NETWORK ID NAME DRIVER SCOPE
  2. 19eb0f999458 bridge bridge local ## 默认方式,桥接
  3. b12765b5a394 host host local ## 共享宿主机网络
  4. 67019894af82 none null local ## 封闭式容器,仅lo口

[root@centos-82 ~]# docker network inspect bridge

  1. "Name": "bridge",
  2. ......
  3. "Driver": "default",
  4. ......
  5. "Subnet": "172.17.0.0/16", ## 子网地址池
  6. "Gateway": "172.17.0.1" ## 网关
  7. ......
  8. "Containers": { ## 包含的容器信息
  9. "2efec0177ae1ed1d6f3705f6357f7c99157f2a74daa2082108c87a69a6b45e8c": {
  10. "Name": "web01",
  11. "EndpointID": "ca991021b1d70462551127cc34753ba1f745ab9c592ac3be56903693759c9132",
  12. "MacAddress": "02:42:ac:11:00:02",
  13. "IPv4Address": "172.17.0.2/16",
  14. ......
  15. "com.docker.network.bridge.name": "docker0", ## 网络名称
  16. "com.docker.network.driver.mtu": "1500" ## MTU
  17. ......

3.2. 模拟网络名称空间

[root@centos-82 ~]# ip netns add ns1 ## 创建网络名称空间

  1. [root[@centos-82 ](/centos-82 ) ~]# ip netns add ns2

[root@centos-82 ~]# ip netns list ## 查看当前网络名称空间

  1. ns2
  2. ns1

[root@centos-82 ~]# ip netns exec ns1 ip a ## 在指定的网络名称空间中执行命令

  1. 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
  2. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

[root@centos-82 ~]# ip link add name veth1.1 type veth peer name veth1.2 ## 创建一对虚拟网卡

[root@centos-82 ~]# ip link show ## veth1.1和veth1.2是一对网卡

  1. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
  2. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  3. 2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
  4. link/ether 00:0c:29:88:a8:40 brd ff:ff:ff:ff:ff:ff
  5. 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
  6. link/ether 02:42:5d:21:bc:03 brd ff:ff:ff:ff:ff:ff
  7. 4: veth1.2@veth1.1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
  8. link/ether a6:b3:2f:16:12:46 brd ff:ff:ff:ff:ff:ff
  9. 5: veth1.1@veth1.2: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
  10. link/ether de:90:83:56:79:1a brd ff:ff:ff:ff:ff:ff

[root@centos-82 ~]# ip link set dev veth1.2 netns ns1 ## 将其中一个网卡一半接入网络名称空间

[root@centos-82 ~]# ip netns exec ns1 ip a ## 接入的网卡处于未激活状态

  1. 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
  2. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  3. 4: veth1.2@if5: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
  4. link/ether a6:b3:2f:16:12:46 brd ff:ff:ff:ff:ff:ff link-netnsid 0

[root@centos-82 ~]# ip netns exec ns1 ip link set dev veth1.2 name eth0 ## 对网卡设备改名

[root@centos-82 ~]# ip netns exec ns1 ip a

  1. 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
  2. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  3. 4: eth0@if5: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
  4. link/ether a6:b3:2f:16:12:46 brd ff:ff:ff:ff:ff:ff link-netnsid 0

[root@centos-82 ~]# ip netns exec ns1 ifconfig -a

  1. eth0: flags=4098<BROADCAST,MULTICAST> mtu 1500
  2. ether a6:b3:2f:16:12:46 txqueuelen 1000 (Ethernet)
  3. RX packets 0 bytes 0 (0.0 B)
  4. RX errors 0 dropped 0 overruns 0 frame 0
  5. TX packets 0 bytes 0 (0.0 B)
  6. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  7. lo: flags=8<LOOPBACK> mtu 65536
  8. loop txqueuelen 1000 (Local Loopback)
  9. RX packets 0 bytes 0 (0.0 B)
  10. RX errors 0 dropped 0 overruns 0 frame 0
  11. TX packets 0 bytes 0 (0.0 B)
  12. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@centos-82 ~]# ifconfig veth1.1 10.154.2.2 ## 激活宿主机的网卡

  1. [root[@centos-82 ](/centos-82 ) ~]# ip netns exec ns1 ifconfig eth0 10.154.2.3 ## 激活名称空间中的网卡

[root@centos-82 ~]# ip netns exec ns1 ifconfig -a

  1. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  2. inet 10.154.2.3 netmask 255.0.0.0 broadcast 10.255.255.255
  3. inet6 fe80::a4b3:2fff:fe16:1246 prefixlen 64 scopeid 0x20<link>
  4. ether a6:b3:2f:16:12:46 txqueuelen 1000 (Ethernet)
  5. RX packets 6 bytes 508 (508.0 B)
  6. RX errors 0 dropped 0 overruns 0 frame 0
  7. TX packets 6 bytes 508 (508.0 B)
  8. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  9. lo: flags=8<LOOPBACK> mtu 65536
  10. loop txqueuelen 1000 (Local Loopback)
  11. RX packets 0 bytes 0 (0.0 B)
  12. RX errors 0 dropped 0 overruns 0 frame 0
  13. TX packets 0 bytes 0 (0.0 B)
  14. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@centos-82 ~]# ping -c 2 -w 1 10.154.2.3 ## 宿主机与网络名称空间中的网卡通信

  1. PING 10.154.2.3 (10.154.2.3) 56(84) bytes of data.
  2. 64 bytes from 10.154.2.3: icmp_seq=1 ttl=64 time=0.046 ms
  3. 64 bytes from 10.154.2.3: icmp_seq=2 ttl=64 time=0.045 ms

[root@centos-82 ~]# ip link set dev veth1.1 netns ns2 ## 将宿主机中的另一半虚拟网卡移动到另一个网络名称空间中

[root@centos-82 ~]# ip netns exec ns2 ifconfig -a

  1. lo: flags=8<LOOPBACK> mtu 65536
  2. loop txqueuelen 1000 (Local Loopback)
  3. RX packets 0 bytes 0 (0.0 B)
  4. RX errors 0 dropped 0 overruns 0 frame 0
  5. TX packets 0 bytes 0 (0.0 B)
  6. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  7. veth1.1: flags=4098<BROADCAST,MULTICAST> mtu 1500
  8. ether de:90:83:56:79:1a txqueuelen 1000 (Ethernet)
  9. RX packets 12 bytes 928 (928.0 B)
  10. RX errors 0 dropped 0 overruns 0 frame 0
  11. TX packets 12 bytes 928 (928.0 B)
  12. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@centos-82 ~]# ip netns exec ns2 ip link set dev veth1.1 name eth0

[root@centos-82 ~]# ip netns exec ns2 ifconfig eth0 10.154.2.9 ## 激活网卡

[root@centos-82 ~]# ip netns exec ns2 ifconfig -a

  1. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  2. inet 10.154.2.9 netmask 255.0.0.0 broadcast 10.255.255.255
  3. inet6 fe80::dc90:83ff:fe56:791a prefixlen 64 scopeid 0x20<link>
  4. ether de:90:83:56:79:1a txqueuelen 1000 (Ethernet)
  5. RX packets 12 bytes 928 (928.0 B)
  6. RX errors 0 dropped 0 overruns 0 frame 0
  7. TX packets 18 bytes 1436 (1.4 KiB)
  8. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  9. lo: flags=8<LOOPBACK> mtu 65536
  10. loop txqueuelen 1000 (Local Loopback)
  11. RX packets 0 bytes 0 (0.0 B)
  12. RX errors 0 dropped 0 overruns 0 frame 0
  13. TX packets 0 bytes 0 (0.0 B)
  14. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@centos-82 ~]# ip netns exec ns2 ping -c 1 -w 1 10.154.2.3 ## 两个名称空间实现通信

  1. PING 10.154.2.3 (10.154.2.3) 56(84) bytes of data.
  2. 64 bytes from 10.154.2.3: icmp_seq=1 ttl=64 time=0.045 ms

3.3. 容器的网络配置

3.3.1. 容器创建时指定

[root@centos-82 ~]# docker run —name bx1 -it —rm busybox:latest ## 默认的主机名是ID

  1. / # hostname
  2. d7e05d8b2fe6

[root@centos-82 ~]# docker run —name bx1 —hostname container-test-bx1 -it —rm busybox:latest ## 手动指定主机名

  1. / # hostname
  2. container-test-bx1
  3. / # cat /etc/hosts ## 默认hosts文件配置
  4. 127.0.0.1 localhost
  5. ::1 localhost ip6-localhost ip6-loopback
  6. fe00::0 ip6-localnet
  7. ff00::0 ip6-mcastprefix
  8. ff02::1 ip6-allnodes
  9. ff02::2 ip6-allrouters
  10. 172.17.0.2 container-test-bx1
  11. / # cat /etc/resolv.conf ## 默认使用了宿主机的DNS服务器
  12. # Generated by NetworkManager
  13. nameserver 223.5.5.5
  14. nameserver 114.114.114.114

[root@centos-82 ~]# docker run —name bx1 —hostname container-test-bx1 —dns 172.17.0.1 —dns 8.8.8.8 —add-host bbs.heyang.com:192.168.1.80 -it —rm busybox:latest

  1. / # cat /etc/hosts
  2. 127.0.0.1 localhost
  3. ::1 localhost ip6-localhost ip6-loopback
  4. fe00::0 ip6-localnet
  5. ff00::0 ip6-mcastprefix
  6. ff02::1 ip6-allnodes
  7. ff02::2 ip6-allrouters
  8. 192.168.1.80 www.heyang.com
  9. 192.168.1.80 bbs.heyang.com
  10. 172.17.0.2 container-test-bx1
  11. / # cat /etc/resolv.conf
  12. nameserver 172.17.0.1
  13. nameserver 8.8.8.8

3.3.2. 修改初始化配置

  • Docker 网络配置参数
  1. {
  2. "bip": "192.168.1.5/24", # docker0桥的IP,定义这个IP后,其它非DNS的字段会自动计算
  3. "fixed-cidr": "10.20.0.0/16", # IPv4 地址池
  4. "fixed-cidr-v6": "2001:db8::/64", # IPv6 地址池
  5. "mtu": 1500, # MTU 数据包分片大小
  6. "default-gateway": "10.20.1.1", # 默认IPv4网关
  7. "default-gateway-v6": "2001:db8:abcd::89", # 默认IPv6网关
  8. "dns": ["10.20.1.1","20.20.1.3"] # 默认DNS地址
  9. }

[root@centos-82 ~]# ip a show docker0

  1. 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
  2. inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
  3. ......

[root@centos-82 ~]# vim /etc/docker/daemon.json

  1. {
  2. "registry-mirrors":["https://registry.docker-cn.com"],
  3. "bip":"10.154.50.1/24",
  4. "dns":["114.114.114.114","192.168.1.99"]
  5. }

[root@centos-82 ~]# systemctl restart docker

[root@centos-82 ~]# ip a show docker0

  1. 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
  2. inet 10.154.50.1/24 brd 10.154.50.255 scope global docker0
  3. ......

[root@centos-82 ~]# docker container run —name bx1 —rm -it busybox:latest

  1. / # ifconfig
  2. eth0 Link encap:Ethernet HWaddr 02:42:0A:9A:32:02
  3. inet addr:10.154.50.2 Bcast:10.154.50.255 Mask:255.255.255.0
  4. ......
  5. / # cat /etc/resolv.conf
  6. nameserver 114.114.114.114
  7. nameserver 192.168.1.99

3.3.3. 添加新的网络设备

[root@centos-82 ~]# docker network ls

  1. NETWORK ID NAME DRIVER SCOPE
  2. f6fc3bdd3b71 bridge bridge local
  3. b12765b5a394 host host local
  4. 67019894af82 none null local

[root@centos-82 ~]# docker network create -d bridge —subnet “10.175.0.0/16” —gateway “10.175.0.1” mybr0

  1. 3ad60ea3b43e8f1a432212f51958216cabcbab7b34679dab9af6e1139c96a0f6

[root@centos-82 ~]# docker network ls

  1. NETWORK ID NAME DRIVER SCOPE
  2. f6fc3bdd3b71 bridge bridge local
  3. b12765b5a394 host host local
  4. 3ad60ea3b43e mybr0 bridge local
  5. 67019894af82 none null local

[root@centos-82 ~]# ip addr show

  1. ......
  2. 4: br-3ad60ea3b43e: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
  3. link/ether 02:42:cd:97:32:bd brd ff:ff:ff:ff:ff:ff
  4. inet 10.175.0.1/16 brd 10.175.255.255 scope global br-3ad60ea3b43e
  5. valid_lft forever preferred_lft forever

[root@centos-82 ~]# docker container run —name bx1 —network mybr0 -it —rm busybox:latest

  1. / # ip a
  2. ......
  3. 5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
  4. link/ether 02:42:0a:af:00:02 brd ff:ff:ff:ff:ff:ff
  5. inet 10.175.0.2/16 brd 10.175.255.255 scope global eth0
  6. valid_lft forever preferred_lft forever

3.4. Docker 网络模型

3.4.1. None模型(仅lo)

[root@centos-82 ~]# docker container run —name bx1 —network none -it —rm busybox:latest ## none模式

  1. / # ip a
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
  3. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4. inet 127.0.0.1/8 scope host lo
  5. valid_lft forever preferred_lft forever

3.4.2. Bridge模型(docker0)

3.4.2.1. 指定Bridge模式

[root@centos-82 ~]# docker container run —name bx1 -it —rm busybox:latest ## 默认bridge模式

  1. / # ip a
  2. .......
  3. 6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
  4. link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
  5. inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
  6. valid_lft forever preferred_lft forever

[root@centos-82 ~]# docker container run —name bx1 —network bridge -it —rm busybox:latest

  1. / # ip a
  2. ......
  3. 8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
  4. link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
  5. inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
  6. valid_lft forever preferred_lft forever

3.4.2.2. NAT 转发
  1. 宿主机所有地址中的随机端口

[root@centos-82 ~]# docker container run —name web -p 80 —rm nginx:latest

[root@centos-82 ~]# docker container port web ## 查看容器的端口映射

  1. 80/tcp -> 0.0.0.0:32768

[root@centos-82 ~]# netstat -lntp | grep docker ##监听在随机端口 32768

  1. tcp6 0 0 :::32768 :::* LISTEN 3441/docker-proxy

[root@centos-82 ~]# docker container inspect web | grep -w IPAddress ## 当前IP

  1. "IPAddress": "172.17.0.2",

[root@centos-82 ~]# iptables -t nat -nvL | grep 172.17.0.2 ## 自动创建DNAT规则

  1. 0 0 MASQUERADE tcp -- * * 172.17.0.2 172.17.0.2 tcp dpt:80
  2. 1 60 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:32768 to:172.17.0.2:80

[root@centos-82 ~]# curl -s -I 172.17.0.2 | grep ^HTTP ## 宿主机访问

  1. HTTP/1.1 200 OK

[root@centos-50 ~]# curl -s -I 192.168.1.82:32768 | grep HTTP ## 外部网络访问

  1. HTTP/1.1 200 OK
  1. 宿主机指定IP的随机端口

[root@centos-82 ~]# docker container run —name web -p 192.168.1.82::80 —rm nginx:latest

[root@centos-82 ~]# docker container port web

  1. 80/tcp -> 192.168.1.82:32768
  1. 宿主机指定IP的指定端口

[root@centos-82 ~]# docker container run —name web -p 192.168.1.82:80:80 —rm nginx:latest

[root@centos-82 ~]# docker container port web

  1. 80/tcp -> 192.168.1.82:80

[root@centos-50 ~]# curl -s -I 192.168.1.82 | grep HTTP ## 外界可以直接访问

  1. HTTP/1.1 200 OK
  1. 宿主机所有地址中的指定端口

[root@centos-82 ~]# docker container run —name web -p 80:80 —rm nginx:latest

[root@centos-82 ~]# docker container port web

  1. 80/tcp -> 0.0.0.0:80

[root@centos-82 ~]# curl -s -I 127.0.0.1 | grep ^HTTP

  1. HTTP/1.1 200 OK

[root@centos-50 ~]# curl -s -I 192.168.1.82 | grep HTTP

  1. HTTP/1.1 200 OK
  1. 宿主机多个端口映射到容器

[root@centos-82 ~]# docker container run —name web -p 80:80 -p 8080:80 —rm nginx:latest

[root@centos-82 ~]# docker container port web

  1. 80/tcp -> 0.0.0.0:8080
  2. 80/tcp -> 0.0.0.0:80

3.4.3. Join 模型(联盟式)

[root@centos-82 ~]# docker run —name bx1 -it —rm busybox:latest

  1. / # ip a
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
  3. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4. inet 127.0.0.1/8 scope host lo
  5. valid_lft forever preferred_lft forever
  6. 32: eth0@if33: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
  7. link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
  8. inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
  9. valid_lft forever preferred_lft forever
  10. / # mkdir -p /data/web
  11. / # echo 'bx1' > /data/web/index.html
  12. / # httpd -h /data/web/

[root@centos-82 ~]# docker container run —name bx2 -it —rm —network container:bx1 busybox:latest

  1. / # ip a ## 共享IP地址,但是其它名称空间隔离
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
  3. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4. inet 127.0.0.1/8 scope host lo
  5. valid_lft forever preferred_lft forever
  6. 32: eth0@if33: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
  7. link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
  8. inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
  9. valid_lft forever preferred_lft forever
  10. / # wget -O - -q 127.0.0.1 ## 可以通过lo访问bx1中的web服务
  11. bx1
  12. / # ls /data/web ## Mount名称空间隔离
  13. ls: /data/web: No such file or directory

3.4.4. Open 模型(共享宿主机网络)

[root@centos-82 ~]# docker run —name bx1 -it —network host —rm busybox:latest

  1. / # ip a ## 显示的是宿主机的网络
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
  3. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4. inet 127.0.0.1/8 scope host lo
  5. valid_lft forever preferred_lft forever
  6. inet6 ::1/128 scope host
  7. valid_lft forever preferred_lft forever
  8. 2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
  9. link/ether 00:0c:29:88:a8:40 brd ff:ff:ff:ff:ff:ff
  10. inet 192.168.1.82/24 brd 192.168.1.255 scope global ens32
  11. valid_lft forever preferred_lft forever
  12. inet6 fe80::76f9:ec2b:13f3:2b18/64 scope link
  13. valid_lft forever preferred_lft forever
  14. 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
  15. link/ether 02:42:5d:21:bc:03 brd ff:ff:ff:ff:ff:ff
  16. inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
  17. valid_lft forever preferred_lft forever
  18. inet6 fe80::42:5dff:fe21:bc03/64 scope link
  19. valid_lft forever preferred_lft forever
  20. / # mkdir /tmp/test/
  21. / # echo 'bx1' > /tmp/test/index.html
  22. / # httpd -h /tmp/test

[root@centos-82 ~]# netstat -lntp ## 在本机上可以直接看到httpd进程

  1. tcp6 0 0 :::80 :::* LISTEN 5796/httpd

[root@centos-82 ~]# ps uax|grep http

  1. root 5796 0.0 0.0 1272 40 ? Ss 23:01 0:00 httpd -h /tmp/test

[root@centos-82 ~]# ls /tmp/test ## Mounts仍然是隔离的

  1. ls: cannot access /tmp/test: No such file or directory

[root@centos-82 ~]# curl 127.0.0.1 ## 可以直接访问

  1. bx1