设置: 我有一个虚拟机,在虚拟机中运行三个容器(一个 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/