从本地的 Cloud Run Emulator 连接到在 Docker (Redis) 中运行的容器

问题描述

我正在为 Intellij (PyCharm) 使用 Cloud Code 插件制作本地云运行服务,但本地部署的服务无法连接到在 Docker 中运行的 redis 实例:

redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.

我可以从 python shell 连接到本地运行的 redis 实例,只是运行在 minikube/docker 中的云运行服务似乎无法连接到它。

有什么想法吗?

编辑,因为人们建议完全不相关的帖子 - 本地运行的 Cloud Run 实例使用 Docker 和 Minikube 运行,并由 Cloud Code for Intellij 自动配置。我怀疑 intellij 的 Cloud Code 将 Cloud Run 实例置于无法访问在 MacOS localhost 上运行的服务(但可以访问 Internet)的环境中,这就是我在帖子中标记这些特定项目的原因。请将建议限制为考虑到这些项目的建议。

解决方法

如果您使用以下方法检查 Docker 网络:

docker network list

您会看到一个名为 cloud-run-dev-internal 的网络。您需要将 Redis 容器连接到该网络。为此,请运行以下命令(此说明假定您的容器名称为 some-redis):

docker network connect cloud-run-dev-internal some-redis

仔细检查您的容器是否已连接到网络:

docker network inspect cloud-run-dev-internal

然后使用容器名称连接到Redis Host:

import redis
...

redis_host = os.environ.get('REDISHOST','some-redis')
redis_port = int(os.environ.get('REDISPORT',6379))
redis_client = redis.StrictRedis(host=redis_host,port=redis_port)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...