【问题标题】:Connect to a container running in Docker (Redis) from Cloud Run Emulator locally从本地 Cloud Run Emulator 连接到在 Docker (Redis) 中运行的容器
【发布时间】:2021-05-21 21:02:53
【问题描述】:

我正在使用 Cloud Code 插件为 Intellij (PyCharm) 制作本地云运行服务,但本地部署的服务无法连接到在 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)的环境中,这就是我在帖子中标记这些特定项目的原因。请将建议限制在考虑到这些项目的范围内。

【问题讨论】:

  • 请显示您如何连接到您的 Redis 实例的信息。另外,你的 Dockerfile 和依赖项上有什么?有一个与您的帖子非常相似的主题,这可以帮助stackoverflow.com/questions/36088409/…
  • 谢谢,但这一点都不相似。本地运行的云运行实例使用 docker 和 minikube 运行,由 Cloud Code for Intellij 自动配置。我怀疑 Intellij 的 Cloud Code 将 Cloud Run 实例置于无法访问在 MacOS localhost 上运行的服务的环境中,这就是我在帖子中标记这些特定项目的原因。

标签: google-cloud-platform redis google-cloud-run google-cloud-code google-cloud-intellij


【解决方案1】:

如果您使用以下方式检查 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)

【讨论】:

  • 谢谢,这正是我所需要的。 docker network inspect 命令特别有用,因为网桥使用本地网络地址空间(不是 127.0.0.1)。
猜你喜欢
  • 2018-05-02
  • 1970-01-01
  • 2020-07-01
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 2015-09-13
相关资源
最近更新 更多