该模式是 Docker 的默认设置,Docker 守护进程创建了一个虚拟以太网桥 docker0,附加在其上的任何网卡之间都能自动转发数据包。默认情况下,守护进程会创建一对对等接口,将其中一个接口设置为容器的 eth0 接口,另一个接口放置在宿主机的命名空间中,从而将宿主机上的所有容器都连接到这个内部网络上。守护进程还会从网桥的私有地址空间中分配一个 IP 地址和子网给该容器。注意启动容器的时候需要指定 - p(固定端口分配) 或者 -P(动态端口分配)参数来暴露端口,否则 IP 数据包就不能从宿主机之外路由到容器中。
1 2 3 4 5 6 7 8 9 10 11
# docker run -d -p 8888:8080 --net=bridge --name=tomcat8 tomcat:8 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 223e6aee4801 tomcat:8 "catalina.sh run" 23 seconds ago Up 21 seconds 0.0.0.0:8888->8080/tcp tomcat8
# 查看宿主机的虚拟网桥列表 # brctl show bridge name bridge id STP enabled interfaces docker0 8000.0242e6d2901f no veth3074090
Docker 四大网络模式之二(host)
该模式将禁用 Docker 容器的网络隔离,因为容器共享了宿主机的 Network Namespace,直接暴露在公共网络中。容器将不会虚拟出自己的网卡和配置自己的 IP 等,即容器直接使用宿主机的 IP 和端口。该模式比 bridge 模式更快(因为没有路由开销),但是它将容器直接暴露在公共网络中,存在安全隐患。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# docker run -d --net=host --name=tomcat8 tomcat:8 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 363792e07323 tomcat:8 "catalina.sh run" 6 minutes ago Up 6 minutes tomcat8
# 查看宿主机的IP信息 # ip addr | grep -A 2 eth0: 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 0c:c4:7a:ab:b8:36 brd ff:ff:ff:ff:ff:ff inet 192.168.1.130/24 brd 192.168.1.255 scope global noprefixroute dynamic eth0
# 查看容器的IP信息,可以发现容器和宿主机具有相同的IP地址192.168.1.130 # dockerexec -it tomcat8 ip addr 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 0c:c4:7a:ab:b8:36 brd ff:ff:ff:ff:ff:ff inet 192.168.1.130/24 brd 192.168.1.255 scope global noprefixroute dynamic eth0
# 查看Docker的网桥列表 # docker network ls NETWORK ID NAME DRIVER SCOPE 14c2653a88a2 bridge bridge local f44c2671ffd1 host host local 007c22522504 jenkins-network bridge local 03b720dc8c80 none null local