flask - 错误 99 连接到本地主机 :6379. 无法分配请求的地址

标签 flask redis docker-compose

设置: 我有一个虚拟机,在虚拟机中运行三个容器(一个 nginx 代理、一个非常简约的 flask 应用程序和 redis)。 Flask 应该在端口 5000 上提供服务,而 Redis 在 6379 上提供服务。

这些容器中的每一个都作为独立服务正常启动和运行,但也可以通过 docker compose 作为服务使用。

在 flask 应用程序中,我的目标是连接到 redis 并查询一些键。

nginx容器暴露80端口,flask 5000端口,redis 6379端口。

在 flask 应用程序中,我有一个尝试创建 redis 客户端的函数

db = redis.Redis(host='localhost', port=6379, decode_responses=True)

运行 flask 应用程序时出现端口无法使用的错误

redis.exceptions.ConnectionError: Error 99 connecting to localhost:6379. Cannot assign requested address.

我不清楚是什么导致了这个问题,任何想法都将不胜感激。

最佳答案

In the flask app I have a function that tries to create a redis client

db = redis.Redis(host='localhost', port=6379, decode_responses=True)

当你的flask进程在容器中运行时,localhost指的是容器本身的网络接口(interface)。它不会解析为您的 docker 主机的网络接口(interface)。

所以需要将localhost替换成运行redis的容器的IP地址。

在 docker-compose.yml 文件的上下文中,这很容易,因为 docker-compose 会将服务名称解析为正确的容器 IP 地址:

version: "3"
services:
  my_flask_service:
    image: ...
  my_redis_service:
    image: ...

然后在你的 flask 应用程序中,使用:

db = redis.Redis(host='my_redis_service', port=6379, decode_responses=True)

关于flask - 错误 99 连接到本地主机 :6379. 无法分配请求的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54965291/

相关文章:

python - Flask 应用程序的导入问题

javascript - 散列电子邮件(或用户名)以存储在 Redis 散列桶中

java - 如何判断jedis是否被添加到类路径中?

jquery - Flask Ajax Post - 如何停止模板的重新渲染

python - 使用 Flask 将变量传递给所有 Jinja2 模板

java - 雷迪森 : WRITE_BIGDECIMAL_AS_PLAIN

makefile - 将环境变量从 Makefile 导出到用户态环境

php - ECS 挂载卷到 nginx 容器

node.js - 在 Docker 构建中找不到 TSC

python - Flask 上下文处理器函数