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