我想连接到在Docker上运行的Google Cloud Bigtable:
docker run --rm -it -p 8086:8086 -v ~/.config/:/root/.config \
bigtruedata/gcloud-bigtable-emulator
它开始没有任何问题:
[bigtable] Cloud Bigtable emulator running on 127.0.0.1:8086
~/.config
这是我以这种方式配置的默认凭据:
gcloud auth application-default login
我使用了官方样本HelloWorld中的Java代码。 另外,我更改了连接配置:
Configuration conf = BigtableConfiguration.configure("projectId", "instanceId");
conf.set(BigtableOptionsFactory.BIGTABLE_HOST_KEY, "127.0.0.1");
conf.set(BigtableOptionsFactory.BIGTABLE_PORT_KEY, "8086");
conf.set(BigtableOptionsFactory.BIGTABLE_USE_PLAINTEXT_NEGOTIATION, "true");
try (Connection connection = BigtableConfiguration.connect(conf)) {
...
我在IntelliJ Idea中为我的应用配置了BIGTABLE_EMULATOR_HOST=127.0.0.1:8086
环境变量。
但是当我运行我的Java应用程序时,它会卡在admin.createTable(descriptor);
上并显示此日志:
... 16:42:44.697 [grpc-default-executor-0] DEBUG com.google.bigtable.repackaged.io.grpc.netty.shaded.io.netty.util.Recycler - -Dio.netty.recycler.ratio:8
一段时间后,它会显示BigtableClientMetrics
的日志,然后抛出异常:
java.net.NoRouteToHostException:无主机路由
尝试使用自己的Dockerfile运行Google Cloud Bigtable时遇到同样的问题。
当我使用此命令运行Google Cloud Bigtable时:
gcloud beta emulators bigtable start
我的应用已成功完成。
那么,如何解决这个问题?
更新
现在我有这个例外:
io.grpc.StatusRuntimeException:UNAVAILABLE:网络因未知原因而关闭
在此之前抛出另一个异常:
java.io.IOException:通过对等方重置连接