You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Flask应用连接容器中的Redis?连接被拒问题排查

解决Flask应用无法连接host网络Redis容器的问题

以下是针对该问题的排查和解决步骤:

1. 替换Redis连接地址为localhost/127.0.0.1

终端代码使用公网IP 128.224.2.97 能正常连接,但Flask应用可能因网络路由、环境限制等原因无法访问该公网IP。由于Redis容器使用了--network host,直接连接回环地址更可靠:

import redis
# 替换为localhost或127.0.0.1
r = redis.Redis(host="localhost", port=6397)
r.hgetall('1')

2. 确认Redis容器的绑定地址和端口

进入Redis容器,检查Redis是否绑定了所有网络接口,以及实际运行端口:

# 进入容器
docker exec -it redis bash
# 查看绑定地址
redis-cli CONFIG GET bind
# 查看运行端口
redis-cli info server | grep tcp_port

如果bind返回的是127.0.0.1,说明Redis仅允许本地回环访问,需要重启容器时指定绑定所有接口:

docker stop redis
docker rm redis
docker run --name redis --network host -d redis redis-server --bind 0.0.0.0 --port 6397

3. 检查Flask运行环境的网络连通性

在Flask应用中添加临时测试路由,验证是否能访问Redis端口:

from flask import Flask
import socket

app = Flask(__name__)

@app.route('/test-redis')
def test_redis_connectivity():
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 替换为你的Redis地址和端口
        result = sock.connect_ex(('128.224.2.97', 6397))
        if result == 0:
            return "Redis端口可访问"
        else:
            return f"Redis端口不可访问,错误码: {result}"
    except Exception as e:
        return f"连接测试失败: {str(e)}"

if __name__ == '__main__':
    app.run(debug=True)

启动Flask后访问http://localhost:5000/test-redis,根据返回结果判断网络是否通畅。

4. 排查防火墙限制

Ubuntu的UFW防火墙可能阻止了Flask应用访问Redis端口,临时关闭防火墙测试:

sudo ufw disable

如果关闭后Flask能正常连接,说明需要添加防火墙规则允许访问6397端口:

sudo ufw allow 6397/tcp
sudo ufw enable

5. 对齐虚拟环境与终端的Redis客户端版本

检查终端和Flask虚拟环境中的Redis客户端版本是否一致,版本差异可能导致连接问题:

# 终端中查看版本
pip show redis
# Flask虚拟环境中查看版本
source /home/ssharma3/.local/share/virtualenvs/cos-dir-QPdremXL/bin/activate
pip show redis

如果版本不一致,升级虚拟环境中的Redis包:

pip install --upgrade redis

内容的提问来源于stack exchange,提问作者SSB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:10:36