Docker Redis本地能Ping通但6379端口连不上的排查与解决方法

 更新时间:2026年05月22日 08:45:53   作者:weixin_45363959  
在 Linux 服务器上部署 Redis Docker 容器,本地连接正常,但远程主机 telnet 端口不通,经过层层排查,最终发现是 Linux 内核参数 net.ipv4.ip_forward 被关闭导致的,本文记录了完整的排查思路与解决方案,需要的朋友可以参考下

问题现象

环境信息:

  • 宿主机 IP192.168.105.222 (CentOS)
  • Redis 版本redis:7.4.6 (Docker)
  • 端口映射0.0.0.0:6379->6379/tcp

故障表现:
在宿主机本地使用 redis-cli 连接一切正常,但在远程 Windows 机器上测试:

  1. Ping 正常(网络层通畅)
  2. Telnet 失败(TCP 连接拒绝/超时)
PS C:\Users\User> ping 192.168.105.222
来自 192.168.105.222 的回复:字节=32 时间=1ms TTL=64
PS C:\Users\User> telnet 192.168.105.222 6379
正在连接192.168.105.222...无法打开到主机的连接。 在端口 6379: 连接失败

排查过程

第一步:检查 Redis 配置(排除法)

最常见的原因是 Redis 开启了保护模式或设置了密码。

$ docker exec redis redis-cli CONFIG GET protected-mode
1) "protected-mode"
2) "no"  ✅ 已关闭
$ docker exec redis redis-cli CONFIG GET requirepass
1) "requirepass"
2) ""    ✅ 无密码

结论:Redis 配置没有问题。

第二步:检查 Docker 端口映射

确认 Docker 是否真的在监听外部端口。

$ docker ps --format "table {{.Names}}\t{{.Ports}}"
NAMES    PORTS
redis    0.0.0.0:6379->6379/tcp, :::6379->6379/tcp

$ ss -tlnp | grep 6379
LISTEN 0 1024 *:6379 *:* users:(("docker-proxy",pid=44615,fd=4))

结论:端口映射正常,docker-proxy 正在监听 0.0.0.0

第三步:检查防火墙与 iptables

$ systemctl status firewalld
Active: inactive (dead)  ✅ 防火墙已关闭

$ iptables -L -n | grep 6379
ACCEPT tcp -- 0.0.0.0/0 172.17.0.3 tcp dpt:6379 ✅ 规则存在

结论:防火墙未拦截,NAT 规则已生成。

第四步:检查 IP Forwarding(锁定元凶)

Docker 容器网络依赖宿主机的 IP 转发 功能。如果该功能被禁用,宿主机将无法将数据包从物理网卡转发到 Docker 网桥。

$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0  ❌ 发现异常!

分析
虽然 iptables 允许了流量,但 Linux 内核层面的 IP 转发开关是关闭的 (0)。这意味着当外部请求到达宿主机网卡后,内核拒绝将其转发给 Docker 容器,导致连接在 TCP 层直接被丢弃。

解决方案

方法一:临时修复(立即生效,重启失效)

sudo sysctl -w net.ipv4.ip_forward=1

方法二:永久修复(推荐,写入配置)

编辑 /etc/sysctl.conf,添加或修改以下参数:

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sudo sysctl -p

验证结果

再次执行检查,确认参数已变为 1:

$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

此时远程机器再次尝试连接:

PS C:\Users\User> telnet 192.168.105.222 6379
Connected to 192.168.105.222.  (连接成功!)

原理分析:为什么需要 ip_forward?

Docker 默认使用 bridge 网络模式,这是一种 NAT(网络地址转换)模式:

[远程客户端] -> (宿主机 IP:6379) -> [docker-proxy] -> (iptables NAT) -> [容器 IP:6379]
  1. 接收包:数据包到达宿主机的物理网卡(eth0)。
  2. 路由判断:内核发现目标 IP 是容器 IP(172.17.0.x),需要将包发送到 docker0 网桥。
  3. 转发检查:因为是从一个接口进,另一个接口出,这属于**转发(Forwarding)**行为。
    • 如果 net.ipv4.ip_forward = 0:内核直接丢弃包 ❌
    • 如果 net.ipv4.ip_forward = 1:内核允许包通过,交由 iptables 处理 ✅

总结

遇到 “本地能通,远程不通” 的 Docker 端口问题时,除了检查防火墙和端口映射,千万别忽略内核参数 net.ipv4.ip_forward

特别是有些系统安全加固脚本或最小化安装的系统,默认会关闭此参数,导致 Docker 网络功能受损。

到此这篇关于Docker Redis本地能Ping通但6379端口连不上的排查与解决方法的文章就介绍到这了,更多相关Docker Redis本地能Ping但6379端口连不上内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • harbor仓库搭建全过程(配置https)

    harbor仓库搭建全过程(配置https)

    需安装Docker及Docker Compose,Harbor版本需匹配,因密码加密算法升级至SHA1,需配置HTTPS以避免登录错误,步骤包括生成CA证书、修改配置、启动仓库、访问地址及数据库调整加密算法,最后设置开机自启
    2025-09-09
  • 安装Docker Desktop报错WSL 2 installation is incomplete的问题(解决报错)

    安装Docker Desktop报错WSL 2 installation is incomplete的问题(解决报错)

    这篇文章主要介绍了安装Docker Desktop报错WSL 2 installation is incomplete的问题,解决方法很简单只需我们自己手动更新一下,我们根据提示去微软官网下载最新版的wsl2安装后即可正常打开,需要的朋友可以参考下
    2021-06-06
  • Docker搭建Calibre-Web在线书库的实现示例

    Docker搭建Calibre-Web在线书库的实现示例

    本文主要介绍了Docker搭建Calibre-Web在线书库的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Docker中实现镜像的推送和拉取的代码步骤

    Docker中实现镜像的推送和拉取的代码步骤

    在 Docker 中,镜像的推送(push)和拉取(pull)是通过与**Docker 镜像仓库(Registry)**交互完成的,默认仓库是 Docker Hub,但你也可以使用私有仓库(Harbor、Nexus、AWS ECR 等),本文详细介绍了Docker实现镜像推送和拉取的步骤,需要的朋友可以参考下
    2025-07-07
  • Docker容器之间数据传输的实现

    Docker容器之间数据传输的实现

    本文主要介绍了Docker容器之间数据传输的实现,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Docker系列学习之Swarm mode管理节点常用命令详解

    Docker系列学习之Swarm mode管理节点常用命令详解

    这篇文章主要为大家介绍了Docker系列学习之Swarm mode管理节点常用命令详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 在 Windows Docker 中安装并配置 Nginx的方法(映射 Windows 端口与路径)

    在 Windows Docker 中安装并配置 Nginx的方法(映射 

    本文将详细介绍如何在Windows系统的Docker环境中运行Nginx容器,并将Windows本地路径和端口映射到容器内,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2026-02-02
  • docker连接spring boot和mysql容器方法介绍

    docker连接spring boot和mysql容器方法介绍

    这篇文章主要介绍了docker连接spring boot和mysql容器方法介绍,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Docker集群的创建与管理实例详解

    Docker集群的创建与管理实例详解

    这篇文章主要介绍了Docker集群的创建与管理,结合实例形式详细分析了docker集群原理、创建、访问等相关操作技巧与注意事项,需要的朋友可以参考下
    2018-06-06
  • docker如何给已存在的容器添加或修改端口映射

    docker如何给已存在的容器添加或修改端口映射

    这篇文章主要介绍了docker如何给已存在的容器添加或修改端口映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02

最新评论