Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flask 连接到本地主机时出现错误99:6379。无法分配请求的地址_Flask_Redis_Docker Compose - Fatal编程技术网

Flask 连接到本地主机时出现错误99:6379。无法分配请求的地址

Flask 连接到本地主机时出现错误99:6379。无法分配请求的地址,flask,redis,docker-compose,Flask,Redis,Docker Compose,设置: 我有一个虚拟机,在虚拟机中运行三个容器(一个nginx代理,一个非常简约的flask应用程序和redis)。烧瓶应位于端口5000,而redis位于6379 这些容器中的每一个都可以作为单独的服务正常运行,但也可以通过docker compose作为服务提供 在flask应用程序中,我的目标是连接到redis并查询一些密钥 nginx容器暴露端口80、烧瓶端口5000和redis端口6379 在flask应用程序中,我有一个尝试创建redis客户端的函数 db = redis.Redis

设置: 我有一个虚拟机,在虚拟机中运行三个容器(一个nginx代理,一个非常简约的flask应用程序和redis)。烧瓶应位于端口5000,而redis位于6379

这些容器中的每一个都可以作为单独的服务正常运行,但也可以通过docker compose作为服务提供

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

nginx容器暴露端口80、烧瓶端口5000和redis端口6379

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

db = redis.Redis(host='localhost', port=6379, decode_responses=True)
db = redis.Redis(host='localhost', port=6379, decode_responses=True)
运行flask应用程序时,我收到一个错误,该端口无法使用

redis.exceptions.ConnectionError: Error 99 connecting to localhost:6379. Cannot assign requested address.
我不清楚是什么导致了这个问题,如果有任何想法,我将不胜感激

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

db = redis.Redis(host='localhost', port=6379, decode_responses=True)
db = redis.Redis(host='localhost', port=6379, decode_responses=True)
当flask进程在容器中运行时,
localhost
引用容器本身的网络接口。它不会解析为docker主机的网络接口

因此,您需要将
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\u redis\u service',port=6379,decode\u responses=True)

我也遇到了同样的问题,只是我希望容器访问的服务是远程的,并且通过ssh隧道映射到我的Docker主机。换句话说,我的代码找不到
docker compose
服务。我明确告诉redis以字符串形式查找我的本地主机,从而解决了这个问题:

pyredis.Redis(host='docker.for.mac.localhost', port=6379)

谢谢,这个有用。显然,在docker环境中,服务名称是适用的,并且应该注意,在给定的设置中,
localhost
意味着容器本身,而不是VM.Nice。在应用这些更改后,我也得到了一个错误:
ConnectionError:error-2连接到lightquery-backend\u redis-server\u 1:6379。名称或服务未知。
我正在尝试从一个容器连接到redis'one。lightquery-backend_redis-server_1是工作人员的,正如我使用
docker ps
看到的,并取其名称:
a2f3928d5a27 redis:alpine“docker entrypoint.s…”20小时前19小时0.0.0.0:6379->6379/tcp lightquery-backend_redis-server_1
谢谢!这个主机也在mac上的ui中工作。你不认为通过做这个改变,我们就变成了对mac的硬依赖吗?如果我们想在linux机器上运行相同的代码,这将不起作用!。只需将路径设置为环境变量,或在python中的运行时发现操作系统即可解决此问题