如何从 docker 容器连接到扳手模拟器

问题描述

我可以直接从本地机器连接到 Spanner 模拟器,但是在尝试从 docker 容器连接到它时遇到了问题。

我的撰写文件中有以下两项服务:

version: '3.7'

services:
  serviceA:
    image: "test
    depends_on:
      - spanner-emulator
    environment:
      SPANNER_EMULATOR_HOST: localhost:9010

  spanner-emulator:
    image: spanner_image
    ports:
      - 9010:9010
      - 9020:9020
      - 9515:9515

当我启动 serviceA 时,我可以使用 gcloud 在我的本地扳手模拟器上运行查询。但是当我尝试从 serviceA 容器中运行命令时,我得到 last exception: 503 Failed to connect to all addresses

我尝试运行的命令(直接在我机器上的容器外运行)

spanner_client = spanner.Client(project="my-proj")
instance = spanner_client.instance("Emulator")
database = instance.database("my-db")
with database.snapshot() as snapshot:
   results = snapshot.execute_sql("SELECT Name,Version FROM test1")
   for row in results:
      print(u"Name: {},Version: {}".format(*row))

感谢帮助!

解决方法

愚蠢的错误。当我将 SPANNER_EMULATOR_HOST 更改为 spanner-emulator:9010

时,我能够从 docker 容器连接到模拟器