docker设置iptables=false后容器内部无法互相访问

发布于:2025-07-30 ⋅ 阅读:(21) ⋅ 点赞:(0)

起因:在centos7中,明明开启了firewalld,没有开放docker映射出来的端口,但是外部网络也能访问,这样会不安全!查资料说道:默认情况下, docker启动后参数中如果加了端口映射, 就会自动将端口开放给所有网络设备访问,并且这种情况下即使在本机的系统防火墙中加规则也无效, 因为docker会自动添加一个优先级最高的针对这个映射端口全开放规则。

禁用docker的iptables

  1. 停止docker

  2. 编辑docker.service

vi /usr/lib/systemd/system/docker.service

#在句尾ExecStart添加 --iptables=false

ExecStart=/usr/bin/dockerd --iptables=false
在这里插入图片描述

  1. 开启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

再启动容器发现服务正常能访问啦!


网站公告

今日签到

点亮在社区的每一天
去签到