Docker 容器的网络连接 & 容器互联
1. Docker 容器网络基础架构
Docker0
ifconfig
查看到的 docker0
是linux的虚拟网桥(OSI数据链路层)
docker0 地址划分:
172.17.42.1 255.255.0.0
总共提供65534个地址
修改docker0 IP池
sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0
网桥管理工具:
bridge-utils
;sudo brctl show
查看网桥设备。添加虚拟网桥:sudo brctl addrbr br0
,更改docker的启动配置:在/etc/default/docker
中添加DOCKER_OPS
值:-b=br0
即可。
linux虚拟网桥特点:可以设置IP地址,相当于拥有一个隐藏的虚拟网卡
2. Docker 容器的互联
- docker在默认时是允许所有容器连接
- docker拒绝容器间互联
- 允许特定容器互联
-icc=true
默认允许容器互相连接
通常重启容器IP会改变,随容器启动而改变!
docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE] [COMMAND]
以指定代号访问容器,可避免IP变化带来的影响,在容器中即可以用别名访问容器(修改了host和改变了env)。(官方不推荐,使用docker network)
- 特定容器访问:
- --icc
- --iptable=true(允许添加到iptable中)
- --link
3. Docker 容器与外部网络的连接
1.ip_forward
--ip-forward=true
决定系统是否转发流量
sysctl net.ipv4.conf.all.forwarding
查看数据转发是否开启
2.iptables包过滤防火墙系统,允许端口映射访问,限制IP访问容器
- 表table
- 链chain
- 规则rule
filter表中包含的链:
- INPUT
- FORWARD
- OUTPUT
查看filter表(默认):
sudo iptables -L -n
添加一条限制访问:
sudo iptables -I DOCKER -s 源IP -d 目的IP -p TCP(协议) --dport 80(端口) -j DROP(操作)