错误99连接到localhost:6379。无法分配请求的地址

时间:2019-03-03 03:26:11

标签: flask redis docker-compose

设置: 我有一个虚拟机,并且在虚拟机中运行三个容器(一个Nginx代理,一个非常简单的Flask应用程序和Redis)。烧瓶应该在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.

我不清楚是什么原因导致了这个问题,任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:4)

  

在flask应用程序中,我有一个尝试创建Redis客户端的功能

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

烧瓶操作在容器中运行时,localhost是指容器本身的网络接口。它无法解析为您的Docker主机的网络接口。

因此,您需要将localhost替换为运行redis的容器的IP地址。

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

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

然后在烧瓶应用中使用:

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

答案 1 :(得分:0)

我有同样的问题,除了我希望我的容器访问的服务是远程的,并通过ssh隧道映射到我的Docker主机。换句话说,我的代码没有make test服务。我通过明确告诉docker-compose以字符串的形式查找本地主机来解决了这个问题:

redis