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
相关推荐
小Ti客栈17 小时前
Spring Boot 集成 Springdoc-OpenAPI 与 Knife4j实现接口文档与可视化调试
java·spring boot·后端
Ai拆代码的曹操18 小时前
Spring 事务 REQUIRES_NEW 嵌套调用:连接池翻倍的秘密
java·后端·spring
IT_陈寒20 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱20 小时前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端
Wang's Blog20 小时前
Go-Zero项目开发24: 基于Bitmap实现群聊消息已读未读
开发语言·后端·golang
Conan在掘金20 小时前
鸿蒙报错速查:struct 里嵌 namespace 声明就炸,根因 + 真解法
后端
东方小月21 小时前
从零开发一个 Coding Agent(三):EventStream 事件流通道设计与实现
前端·人工智能·后端
卫子miao21 小时前
如何评价当前大语言模型的记忆机制?
后端·架构
神奇小汤圆21 小时前
为什么 AQS 成为 Java 并发的基石?
后端
星栈1 天前
MCP 从 stdio 迁到 SSE,踩了 5 个传输层坑
人工智能·后端·架构