Docker网络
不同的网络命名空间中,协议栈是独立的,完全隔离,彼此之间无法通信。同一个网络命名空间有独立的路由表和独立的
Iptables/Netfilter
来提供包的转发、NAT、IP包过滤等功能。将与网络协议栈相关的全局变量变成一个
Net Namespace
变量的成员,然后在调用协议栈函数中加入一个Namepace参数。1、创建网络命名空间
ip netns add
name
2、在命名空间内执行命令
ip netns exec
name
command
3、进入命名空间
ip netns exec
name
bashDocker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。

这里写图片描述
Docker网络模式 | 配置 | 说明 |
---|---|---|
host模式 | --net=host | 容器和宿主机共享Network namespace。 |
container模式 | --net=container:NAME_or_ID |