0
点赞
收藏
分享

微信扫一扫

docker - 网络2

夕阳孤草 2023-10-07 阅读 39

3.2 查看宿主机网络环境:

$ ip a
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:7d:a8:0b:18 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
6: veth0c0140e@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
    link/ether 4a:35:f2:f8:7a:e6 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::4835:f2ff:fef8:7ae6/64 scope link
8: veth205c19e@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
    link/ether a2:3b:b5:d1:cd:56 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::a03b:b5ff:fed1:cd56/64 scope link

说明:

①. docker0是Docker服务默认会创建一个docker0网桥(其上有一个 docker0内部接口),它在内核层连通了其它的物理或虚拟网卡,可以将所有容器和本地主机都放到同一个物理网络.

②. Docker默认指定了docker0接口的IP地址和子网掩码,让主机和容器之间可以通过网桥相互通信,还给出了MTU(接口允许接收的最大传输单元),通常是1500 Bytes,或宿主主机网络路由上支持的默认值.

③. 宿主机上查看除了本机网卡还有4端口docker0、6端口veth0c0140e、8端口veth205c19e.

3.3 查看test1容器中的网络环境:

$ docker exec -it test1 /bin/sh
# ip a
......
5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0

3.4 查看bridge信息:

$ apt-get install -y bridge-utils
$ brctl show
bridge name  bridge id          STP enabled   interfaces
docker0      8000.02427da80b18  no            veth0c0140e
                                              veth205c19e

3.5 说明:

container要怎样连到docker的bridge上面(docker0端口)?

①. docker0的namespace是宿主机的.宿主机的6端口veth0c0140e是负责连到docker0上面的.

②. test1容器也有自己的namesapce.这两个namespace要连在一起需要一对veth pair,而test1容器的5端口eth0@if6与宿主机的6端口veth0c0140e是一对.通过这一对veth pair就可以连接到了宿主机docker0上面.

如图:
①. 两个container各有一对veth pair(单独的namespace),通过连接在docker0 bridge(宿主机的namespace).
②. 类似两台真实机器通过路由器或交换机进行局域网连接在一起.
③. docker容器可以访问internet,是做了NAT,将docker的数据包发给了宿主机,再转发出去.

举报

相关推荐

0 条评论