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 小时前
Java-07 深入浅出 MyBatis数据库一对多关系模型实战:表结构设计与查询实现
java·后端
花椒技术2 小时前
企业内部 Agent 落地复盘:Gateway、Skill 和二次确认如何串起受控业务执行
后端·agent·ai编程
我是一颗柠檬4 小时前
【MySQL全面教学】MySQL事务与ACID Day9(2026年)
数据库·后端·mysql
枕星而眠4 小时前
数据结构八大排序详解(一):四大简单排序
c语言·数据结构·c++·后端
IT_陈寒4 小时前
React useEffect闭包陷阱差点把我整失业了
前端·人工智能·后端
苍何4 小时前
爆肝两周,我把 Codex 最全实战指南开源了
后端
bug菌5 小时前
【SpringBoot 3.x 第254节】夯爆了,数据库访问性能优化实战详解!
数据库·spring boot·后端
Rust研习社5 小时前
从碎片化到标准化:cargo-bp 如何重构 Rust 开发逻辑
后端·rust·编程语言
锋行天下5 小时前
一句mysql复杂查询搞崩一个壮汉
后端·mysql·go
不肯过江东丶5 小时前
大聪明教你学Java | Spring AI Lab:一个让你 3 分钟接入 AI 对话能力的 Spring Boot 工具箱
spring boot·后端