我有一个问题。
我正试图将Android应用程序连接到indy池,但我看到错误(分类帐操作超时(来源(https://github.com/jSh4rk/SampleIndyWallet)
我在AWS中安装了indy(ubuntu 16.04 lts(,并在使用docker 运行节点后
当运行docker时,我输入了命令
docker build --build-arg pool_ip=172.31.37.144 -f ci/indy-pool.dockerfile -t indy_pool
因为我希望172.31.37.144
是我的docker容器的私有ip地址:
docker run -itd -p 172.31.37.144:9701-9708:9701-9708 -t indy_pool
在SampleIndyWallet的文件MainActivity.java中,我将字符串ip更改为容器的公共ip。
但是,在打开与池的连接的过程中,我遇到了错误org.hyperledger.indy.sdk.InvalidStateException: The SDK library experienced an unexpected internal error
。
为了从任何地方连接到Hyperledger Indy,正如您可能已经知道的那样,您需要genesis文件。Genesis文件指定网络节点的IP地址及其相关的加密数据(签名、公钥…(
当你发布命令构建Indy pool docker时docker build --build-arg pool_ip=172.31.37.144 -f ci/indy-pool.dockerfile -t indy_pool
指定正确的CCD_ 6是很重要的。pool_ip
将成为genesis文件的一部分。当你向indySDK提供genesis文件时,它会使用这些IP并尝试与它们建立连接。如果您遇到PoolTimeout
之类的错误,很可能是因为从运行IndySDK的.环境中无法访问这些IP
因此,通过如上所述构建映像,您可以说:">连接到此映像组成的容器的客户端必须能够通过地址172.31.37.144
到达容器。"。如果您试图从同一网络中的其他docker容器连接到池,那么这可能会起作用。但若应用程序在本地主机上运行,172.31.37.144
将不会连接到任何位置,因为这是docker网络中唯一的内部IP地址。
据我所知,您希望在池中运行Indy网络,并从主机上运行的应用程序连接到池。最简单的方法是通过公开端口使网络在localhost/127.0.0.1
上可访问。让我们首先构建indy网络容器,该容器的genesis事务中将包含127.0.0.1
。
docker build --build-arg pool_ip=127.0.0.1 -f ci/indy-pool.dockerfile -t indy_pool
现在,让我们读取图像的genesis文件并将其存储在本地。
docker exec indy_pool cat '/var/lib/indy/sandbox/pool_transactions_genesis' > ~/my_genesis.txn
接下来,您将像以前一样启动池,但不需要指定容器的内部ip地址——这无关紧要。
docker run -itd -p 9701-9708:9701-9708 -t indy_pool
现在,当您启动应用程序并尝试连接到池时,您必须指定我们在本地主机上创建的genesis文件的路径。