Docker 桥接网络无法访问同网段宿主机故障排查

一、故障现象

  1. 环境:CentOS 系统,服务基于 Docker + Docker Compose 部署,容器使用默认 docker0 桥接网络。
  2. 场景:容器需要访问宿主机同网段IP:8080服务。
  3. 表现:
    • 宿主机直接访问 curl -k https://宿主机同网段IP:8080,正常返回响应,网络连通正常。
    • 容器内执行相同命令,直接超时,报错 curl: (28) Failed to connect... Couldn't connect to server。
  4. 前置排查:系统防火墙关闭,内核 IP 转发已开启,排除系统层面网络拦截。

二、根因定位

查看 /etc/docker/daemon.json 配置文件,两个核心网络参数被手动禁用,直接导致容器网络转发失效:

json 复制代码
// 错误配置(故障根源)
"iptables": false,
"ip-masq": false

三、故障原理

1. iptables: false(核心故障点)

Docker 依赖 iptables 实现容器网络转发、路由。 配置为 false → Docker 禁止创建任何网络规则 → 容器数据包无法穿出 docker0 网桥,直接被丢弃。

2. ip-masq: false(核心故障点)

该参数开启 IP 伪装(SNAT 源地址转换) 。 容器使用虚拟内网 IP,访问外部设备必须转换为宿主机物理 IP 才能正常回包。 配置为 false → 关闭地址转换 → 目标设备拒绝响应容器请求。

四、网络架构(完整路径+规则标注)

五、故障解决办法

步骤1:精简并修复 Docker 核心配置

编辑 /etc/docker/daemon.json,删除无用配置 ,仅保留核心参数,修复关键网络配置:

json 复制代码
{
  "ip-forward": true,
  "ip-masq": true,
  "iptables": true,
  "live-restore": true,
  "log-driver": "json-file",
  "log-opts": {
    "max-file": "10",
    "max-size": "100m"
  }
}

步骤2:重载配置并重启 Docker

环境已开启 live-restore,重启 Docker 不中断运行中的容器:

bash 复制代码
systemctl daemon-reload
systemctl restart docker

步骤3:重启业务容器

bash 复制代码
docker-compose down && docker-compose up -d

步骤4:连通性验证

bash 复制代码
docker exec -it office-preview curl -k https://192.168.1.200:8080
相关推荐
子兮曰6 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰6 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝6 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码6 天前
别再前后端各写一套表单校验了
java·后端
大勇前进6 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu6 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile6 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白806 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙6 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端
盖伦发发6 天前
软件工程SOLID 五大设计原则
后端·软件工程