千家信息网

一次centos Docker网桥模式无法访问宿主机Redis服务的故障排除经历

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,背景:之前做了一个项目,需要在容器内访问宿主机提供的Redis 服务(这是一个比较常见的应用场景哈), 常规方案:① 主机网络(docker run --network=host): 完全应用主机网络
千家信息网最后更新 2026年11月03日一次centos Docker网桥模式无法访问宿主机Redis服务的故障排除经历

背景:

之前做了一个项目,需要在容器内访问宿主机提供的Redis 服务(这是一个比较常见的应用场景哈), 常规方案:

① 主机网络(docker run --network=host): 完全应用主机网络堆栈,在容器内localhost就是指向宿主机

② 网桥网络(docker run --network=bridge): 这也是docker容器默认的网络通信模式,容器内localhost 指向的是容器自身,不能使用 localhost 访问宿主机上localhost:6379承载的Redis服务 。

docker会默认建立docker0 网桥;

网桥有一个网关ip, 有一个子网段; 网桥内容器从子网段中确定容器ip( ip addr eth0), 网桥内容器可通过 service name相互访问;

网桥内容器通过 docker0 Getway得以访问外网。

不做骚操作,沿用常见的②网桥模式:

第一步:自定义网桥并应用该自定义网桥

docker network create --gateway 172.16.1.1 --subnet 172.16.1.0/24 app_bridge
docker run --network=app_bridge --name ......# 以下截取自docker-compose.yml文件......networks: default: name: app_bridge external: true

为啥不利用默认docker0网桥?

本文开头已讲: docker0 是默认网桥,新建的容器默认都会加入这个网桥,所以我们需要建立一个专属于本程序的网桥app_bridge

第二步:容器内建立 对应于宿主机的别名

为实现在容器内网桥模式访问宿主机localhost:6379 的服务, 必须搭配docker 提供的 --add-host 选项(对应到docker-compose.yml这个配置是extra_host)。

docker run 的--add-host 选项能在 容器 /etc/hosts 文件增加行记录,便于我们使用该名称访问其他网络。docker run -it --add-host dockerhost:172.16.1.1 ubuntu cat /etc/hosts172.17.0.22 09d03f76bf2cfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopback172.16.1.1 dockerhost

之后在程序的配置文件即可应用 dockerhost:6379 访问宿主机Redis服务。

------------------------------------------ 稍熟悉docker网络模型的朋友应该 都能理解并完成上述操作-----------------------------------------------------

一个状况:

我在公司CentOS7机器上使用上述操作, 容器内一直无法连通宿主机(容器间还是能正常访问)。

简化问题测试:新建容器,在容器内尝试ping docker0 网关, 哔了狗了,4台公司机器都ping不通docker0网关,外网还是正常访问。

那这个问题就成了: 使用默认的docker0网桥,容器内无法ping通docker0网关,进而无法访问宿主机。

呀呀呀呀, 八成是公司机器的配置问题 ~。。~

追问公司运维同学,发现:

Chain INPUT (policy DROP)

以上INPUT链的缺省策略是丢弃:从容器内访问宿主机的INPUT链规则并不匹配其中列出的任意一条,将被丢弃,所以我们从容器ping docker0网关会卡住收不到结果。

除非满足列出的INPUT链规则,否则缺省的策略就是丢弃。

后面还有转发和OUTPUT链缺省是 接受

这个策略的初衷是 服务器安全(尼玛, 导致容器访问宿主机的基础能力都没有了!!!)。

运维方案:

① 使用 sudo service iptables stop 关闭iptables

② 把要使用的网桥网段加入 INPUT链

sudo iptables -I INPUT -s 172.17.0.0/16 -j ACCEPT

【接受docker0子网段172.17.0.0/16 INPUT】 加入规则, 传送门

OK, That's All, 以后若有朋友在公司网络遇到 默认网桥容器内无法ping通网桥网关,进而无法访问宿主机,可参考本文排障。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

容器 网桥 宿主 宿主机 网络 网关 服务 公司 内容 网段 应用 模式 就是 文件 机器 策略 规则 问题 配置 呀呀 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小米移动互联网科技园 今日互联网科技 互联网核心科技是什么 互联网科技社 互联网最新的科技有限公司 上海挚品互联网科技 互联网科技公司怎么样 善班互联网科技 世界互联网领先科技成果 易通互联网络科技有限公司 万达互联网科技 长亮科技 互联网金融 撒么互联网科技公司 互联网系的金融科技公司 互联网科技革命什么开始 威龙国际互联网科技公司 杭州披云加互联网科技有限公司 山东蛋芒互联网科技有限公司 科技互联网专业务虚会材料 承德科技产业互联网平台 上海喔噻互联网科技有限公司 上海睿民互联网科技有限公司 互联网科技logo设计 科技与互联网哪个更好 武汉健翔互联网络科技有限公司 崇明区互联网教育科技诚信经营 合肥互联网科技公司公章图片 伍佰万互联网科技怎么赚钱 科技互联网经济论坛 互联网科技创业计划的风险分析
0