起因:在centos7中,明明开启了firewalld,没有开放docker映射出来的端口,但是外部网络也能访问,这样会不安全!查资料说道:默认情况下, docker启动后参数中如果加了端口映射, 就会自动将端口开放给所有网络设备访问,并且这种情况下即使在本机的系统防火墙中加规则也无效, 因为docker会自动添加一个优先级最高的针对这个映射端口全开放规则。
禁用docker的iptables
停止docker
编辑docker.service
vi /usr/lib/systemd/system/docker.service
#在句尾ExecStart添加 --iptables=false
ExecStart=/usr/bin/dockerd --iptables=false
- 开启docker
启动容器服务时发现关联的容器之间访问不通
容器a会调用容器b的接口来启动,禁用docker的iptables之后,服务启动时报错访问不到容器b的接口
查到可能是:禁用docker的iptables之后,docker的端口就回被firewalld管理,开放端口出去就需要使用firewall-cmd命令添加
因为容器b映射出来的端口号还没在防火墙放行,所以容器a访问不到?但这个端口我并不想给外部人使用,不安全,所以想到把ip添加到白名单,先试试再说
查看docker的网络
发现个很奇怪的事情,每次重启docker服务,用ip ad都会发现这个虚拟网络ip递增
查看自己docker使用的网络
cd /opt/software/docker
docker compose config
固定docker的ip
接下来如何固定docker重启后这个虚拟ip不变更呢
查到一个很简单粗暴的方法
在/etc/docker/daemon.json中改变默认桥接网络的子网,配置完重启docker
{
"bip": "172.23.0.1/16",
"fixed-cidr": "172.23.0.0/16"
}
- bip(Bridge IP)
把宿主机上 docker0 网卡的地址固定为 172.23.0.1/16,这样 Docker 默认网段就固定在 172.23.0.0/16,重启后不会漂移。 - fixed-cidr
限制 Docker 从这个 CIDR 范围内 给容器分配 IP,防止越界
firewalld添加网段白名单
firewall-cmd --zone=trusted --add-source=172.23.0.0/16 --permanent
firewall-cmd --reload
再启动容器发现服务正常能访问啦!