千家信息网

docker中有几种网络方式

发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,这篇文章主要介绍了docker中有几种网络方式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。bridge方式(默认)Host IP为1
千家信息网最后更新 2025年02月06日docker中有几种网络方式

这篇文章主要介绍了docker中有几种网络方式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

bridge方式(默认)

Host IP为186.100.8.117, 容器网络为172.17.0.0/16
下边我们看下docker所提供的四种网络:
创建容器:(由于是默认设置,这里没指定网络--net="bridge"。另外可以看到容器内创建了eth0)

[root@localhost ~]# docker run -i -t mysql:latest /bin/bashroot@e2187aa35875:/usr/local/mysql# ip addr1: lo:  mtu 65536 qdisc noqueue state UNKNOWN    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 forever75: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff    inet 172.17.0.2/16 scope global eth0       valid_lft forever preferred_lft forever    inet6 fe80::42:acff:fe11:2/64 scope link       valid_lft forever preferred_lft forever

容器与Host网络是连通的:

root@e2187aa35875:/usr/local/mysql# ping 186.100.8.117PING 186.100.8.117 (186.100.8.117): 48 data bytes56 bytes from 186.100.8.117: icmp_seq=0 ttl=64 time=0.124 ms

eth0实际上是veth pair的一端,另一端(vethb689485)连在docker0网桥上:

[root@localhost ~]# ethtool -S vethb689485NIC statistics:     peer_ifindex: 75[root@localhost ~]# brctl showbridge name     bridge id               STP enabled     interfacesdocker0         8000.56847afe9799       no              vethb689485

通过Iptables实现容器内访问外部网络:

[root@localhost ~]# iptables-save |grep 172.17.0.*-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE-A FORWARD -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 5000 -j ACCEPT

none方式

指定方法: --net="none"
可以看到,这样创建出来的容器完全没有网络:

[root@localhost ~]# docker run -i -t --net="none"  mysql:latest /bin/bashroot@061364719a22:/usr/local/mysql# ip addr1: lo:  mtu 65536 qdisc noqueue state UNKNOWN    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 foreverroot@061364719a22:/usr/local/mysql# ping 186.100.8.117PING 186.100.8.117 (186.100.8.117): 48 data bytesping: sending packet: Network is unreachable

那这种方式,有什么用途呢?
实际上nova-docker用的就是这种方式,这种方式将网络创建的责任完全交给用户。
可以实现更加灵活复杂的网络。
另外这种容器可以可以通过link容器实现通信。(后边详细说)

host方式

指定方法:--net="host"
这种创建出来的容器,可以看到host上所有的网络设备。
容器中,对这些设备(比如DUBS)有全部的访问权限。因此docker提示我们,这种方式是不安全的。
如果在隔离良好的环境中(比如租户的虚拟机中)使用这种方式,问题不大。

container复用方式

指定方法: --net="container:name or id"
如下例子可以看出来,两者的网络完全相同。

[root@localhost ~]# docker run -i -t   mysql:latest /bin/bashroot@02aac28b9234:/usr/local/mysql# ip addr1: lo:  mtu 65536 qdisc noqueue state UNKNOWN    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 forever77: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff    inet 172.17.0.3/16 scope global eth0       valid_lft forever preferred_lft forever    inet6 fe80::42:acff:fe11:3/64 scope link       valid_lft forever preferred_lft forever[root@localhost ~]# docker run -i -t --net="container:02aac28b9234"  mysql:latest /bin/bashroot@02aac28b9234:/usr/local/mysql# ip addr1: lo:  mtu 65536 qdisc noqueue state UNKNOWN    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 forever77: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff    inet 172.17.0.3/16 scope global eth0       valid_lft forever preferred_lft forever    inet6 fe80::42:acff:fe11:3/64 scope link       valid_lft forever preferred_lft forever

举例(openstack nova-docker中的网络实现方式)

openstack的nova-docker插件可以向管理虚拟机一样管理容器。
容器网络的创建方式:首先创建--net="none"的容器,然后使用如下过程配置容器网络。(以OVS为例,也可以使用linux bridge)

#创建veth设备ip link add name veth00 type veth peer name veth01#将veth设备一端接入ovs网桥br-int中ovs-vsctl -- --if-exists del-port veth00 -- add-port br-int veth00 -- set Interface veth00 external-ids:iface-id=iface_id external-ids:iface-status=active external-ids:attached-mac=00:ff:00:aa:bb:cc external-ids:vm-uuid=instance_id#启动ovs的新加端口ip link set veth00 up #配置容器的网络namespacemkdir -p /var/run/netnsln -sf /proc/container_pid/ns/net /var/run/netns/container_id#将veth另一端加入容器namespaceip link set veth01 netns container_id#配置容器上该网络设备的mac,ip,gatewayip netns exec container_id ip link set veth01 address mac_addressip netns exec container_id ifconfig veth01 ip ip netns exec container_id ip route replace default via gateway dev veth01

至此,容器与host上的虚拟网络连通。之后br-int与br-ex/br-tun连通,最终实现与业务网络的连通。

感谢你能够认真阅读完这篇文章,希望小编分享的"docker中有几种网络方式"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

网络 容器 方式 设备 一端 篇文章 方法 配置 实际 实际上 网络设备 网桥 管理 复杂 相同 良好 安全 不大 业务 价值 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库服务器名 数据库链接网站 软件开发项目报价怎么处理 闵行区方便软件开发信息推荐 国家网络安全宣传周的团课 19英寸服务器机柜 数据库系统概率知识点总结 数据库锁定了怎么办 附加数据库错误5210 服务器机房视频 从软件开发使用到它走向消亡 菜谱网站的数据库设计 mysql数据库调优技术大全 软件开发缴纳增值税 如何判断串口已经发完数据库 服务器硬盘有维修价值吗 网络为人民网络安全靠人民绘画 在北京学软件开发 民国期刊杂志的数据库有哪些 腾讯青少年网络安全防线 数据库报告总结1500字 舟山手机游戏软件开发公司 深圳触摸屏服务器厂家 闵行区专业软件开发服务电话 九游太古仙尊几天开一次服务器 货运船设计软件开发服务 玄武区网络软件开发信息推荐 云服务器数据安全性 原神换个服务器会重新开始吗 网络技术创新创业计划书团队成员
0