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 实现容器网络转发、路由。 配置为 falseDocker 禁止创建任何网络规则 → 容器数据包无法穿出 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
相关推荐
爱勇宝1 天前
第 1 章:别把“需求文档”当成真正的需求
前端·后端·程序员
IT_陈寒1 天前
闭包陷阱让我加了两天班,JavaScript你真行
前端·人工智能·后端
易协同低代码1 天前
通达OA核心类库TD类深度解析
后端
Gopher_HBo1 天前
Go语言学习笔记(十八)Gin处理Session
后端
谭光志1 天前
工具塞满上下文窗口怎么办?深度拆解 AI Agent Tool Search 按需加载实现原理
前端·后端·ai编程
她说..1 天前
Java 默认值设置方式
java·开发语言·后端·springboot
foggyprojects1 天前
从0开始,一句话启动AI DataAgent
后端·数据分析·ai编程
郡杰1 天前
一些基础和问题解决
后端
陈随易1 天前
前端项目部署只要30秒
前端·后端·程序员
YIAN1 天前
从零手写文件读取 MCP 服务:一文吃透 Model Context Protocol 全链路通信原理
前端·后端·mcp