此外,还要启用iptables拦截桥接网络上的流量:
sudo modprobe br_netfilterTry,again:
curl 10.0.2.15:5000<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">ok了
了解Docker网络驱动程序现在,我们再深入一下,了解一些Docker网络模式 。首先从--network host模式开始 。尝试比较以下命令ip link和的输出sudo docker run -it --rm --network host alpine ip link 。实际上,两者是完全一样的 。即在该host模式下,Docker根本不使用网络命名空间隔离,并且容器在根网络命名空间中工作,并与主机共享网络堆栈 。
下一个要检查的模式是--network none 。该sudo docker run -it --rm --network none alpine ip link命令的输出仅显示单个环回网络接口 。这与即在添加任何veth设备之前,新创建的网络命名空间非常相似 。
最后但并非最不重要的一点是--network bridge(默认)模式 。这就是本文中我们使用的方法 。
无特权容器和网络本文中我们使用了很多sudo操作,如果没有root特权就无法配置网络 。另外一个云原生标准的容器管理器podman,可以作为docker管理器替换 。虫虫之前的文章中对它做过专门介绍 。podman一个不错的功能之一就是它专注于无root容器 。podman建立根网络的方法非常接近docker,为了实现无root容器,podman依赖于slirp4netns项目:
从Linux 3.8开始,非特权用户可以与user_namespaces(7)一起创建network_namespaces(7) 。但是,非特权网络命名空间并不是很有用,因为在主机和网络命名空间上创建veth(4)对仍然需要root特权 。(即没有互联网连接)
slirp4netns允许通过将网络命名空间中的TAP设备连接到用户模式TCP / IP堆栈(“slirp”),以完全无特权的方式将网络命名空间连接到Internet 。
结论本文中,我们介绍了在容器网络的详细实现细节方法,了解这些细节对我们熟悉容器网络和排查容器网络相关故障时候非常有意义 。当然组织容器网络的方法不可能的只有这种方法(当然,可能是使用最广泛的一种方法) 。实际上,还有其他很多的实现方式方式,可以通过官方或第三方插件实现,有兴趣可以查看相关的文档 。
推荐阅读
- EFK 日志系统收集K8s日志 之 容器标准输出日志
- 使用Python管理网络设备
- 借助工具优化Dockerfile分层
- 网络实用技巧:保护在线账户 谨慎共享信息
- 七类网线相较六类网线有什么区别,凭什么驾驭万兆网络?
- Docker命令大全
- docker下拉取tomcat镜像以及配置,亲测可用
- 无线网络每天不定时出现网速卡顿或无连接,如何处理?
- pc是什么意思网络用语?pc是什么意思材料_2
- 云计算核心技术Docker教程:docker-compose控制服务启动和关闭顺序
