从Java应用程序连接到在Docker上运行的Google Cloud Bigtable

时间:2018-06-13 14:08:21

标签: java docker google-cloud-bigtable

我想连接到在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:通过对等方重置连接

0 个答案:

没有答案