设置:
我有一个虚拟机,并在虚拟机中运行三个容器(一个 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.
我不清楚可能导致此问题的原因,任何想法将不胜感激。
在 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)