新手问答 请问在 docker 下面如何搭建 keosd 服务,才能在外网通过 rpc 的 api 访问 wallet 相关接口?

timbrown · 2018年09月08日 · 最后由 gk5 回复于 2018年09月25日 · 6516 次阅读

如题目。我在linux上的docker是这么运行的(其实也就是照搬官网的代码):

docker network create eosdev
docker run --name nodeos -d -p 8888:8888 --network eosdev \
-v /tmp/eosio/work:/work -v /tmp/eosio/data:/mnt/dev/data \
-v /tmp/eosio/config:/mnt/dev/config eosio/eos-dev  \
/bin/bash -c "nodeos -e -p eosio --plugin eosio::producer_plugin \
--plugin eosio::history_plugin --plugin eosio::chain_api_plugin \
--plugin eosio::history_api_plugin \
 --plugin eosio::http_plugin -d /mnt/dev/data \
--config-dir /mnt/dev/config \
--http-server-address=0.0.0.0:8888 \
--access-control-allow-origin=* --contracts-console --http-validate-host=false"
docker run -d --name keosd --network=eosdev \
-i eosio/eos-dev /bin/bash -c "keosd --http-server-address=0.0.0.0:9876"

之后就是一些测试的操作。
访问http://xxxx:8888/v1/chain/get_info 这类接口没问题,但访问钱包相关的接口api就报400,(端口是开放了的8888、9876、8900)

共收到 20 条回复

不是1.2取消了钱包相关插件了吗?

strahe 回复

哦,谢谢。那想通过程序来调用eos相关的接口,有什么样的解决方案?

timbrown 回复

现在需要单独开启keosd服务才可以使用wallet_api接口,我已经弄好了在用,就是现在在本地创建eosio.system里的账户报错

gk5 回复

意思是只开启keosd?请问方便发送一下您的keosd的启动命令吗?谢谢,我这边启动keosd后,外网访问一直是400
我的启动命令是:

docker run -d --name keosd \
-v /data/eosio/eosio-wallet:/opt/eosio/bin/data-dir \
-v /data/eosio/eosio-wallet:/root/eosio-wallet \
-p :8900:8900 \
-t eosio/eos /opt/eosio/bin/keosd \
--wallet-dir /opt/eos/bin/data-dir \
--http-server-address=0.0.0.0:8900

你好,我的环境是Ubuntu虚拟机,在eosio-wallet目录下配置config.ini,

在keosd目录下执行./keosd --plugin eosio::wallet_api_plugin

gk5 回复

好的,谢谢👏

timbrown 回复

没事,互相学习
keosd和nodes是两个独立的服务,所以要指定端口号;修改的是eosio-wallet 目录下的config.ini文件 http-server-address = 192.168.1.56:8888
我这里突然不能上传截图了,给你看看我的命令吧
锁定钱包
curl http://192.168.1.56:8888/v1/wallet/lock -X POST -d '"default"'

gk5 回复

恩,谢谢你的思路。 我目前是在docker的环境下,在尝试docker命令中启动keosd服务并开启rpc接口

gk5 回复

你好,昨天还有一个问题。就是我的keosd服务是放在linux服务器上面的,在本地(linux中使用curl)可以调通,而通过浏览器却不能访问(端口都对外开放了),请问你是怎么处理的?

timbrown 回复

你好,我之前用360浏览器不能访问,下载了谷歌浏览器可以访问了,主要访问时去掉前面的curl

gk5 回复

好的,我用的是谷歌,当我配置http-server-address为linux外网的IP时,启动keosd服务报安全异常!

timbrown 回复

外网IP不用配置啊,默认都是可以访问的啊

gk5 回复

刚没看清楚,你在本地测试没必要配置外网IP,你自己和你的局域网内同事都可以访问的,外网设置我没弄,肯定会设计安全问题,我觉得这个侧重点不对吧

gk5 回复

是的,是eos不允许,可以用内网IP和自己应用程序服务的局域网。谢谢了

gk5 回复

你好!我也遇到了类似的问题,不过我不是使用的docker,不过应该都差不多的。
服务器我使用的是cent7,keosd --http-server-address=localhost:8899启动钱包服务。config中只修改了http-server-address = 服务器IP:8899。然后我在本机调用api:服务器IP:8899/v1/wallet/list_wallets,却总是失败,这个问题卡了我很久,请问估计是哪里出了问题呢?感谢!

yuyanray 回复

在服务器上curl localhost:8899/v1/wallet/list_wallets都是可以的

yuyanray 回复

服务器上防火墙也是关闭了的

解决了,但是很奇怪。我一直以为keosd默认使用中的config.ini的配置,所以我将里面的http-server-address = 127.0.0.1:8888改为http-server-address = 服务器IP:8899,但是一直不管用,然后我直接命令行启动keosd:keosd --http-server-address=服务器IP:8899,就可以了。之前我一直使用的是keosd --http-server-address=localhost:8899启动钱包服务。因为我以为命令行启动时指定服务启动在本地,然后在config.ini指定要开放的IP和端口,看来是不行的。

我现在只能这样理解中的config.ini是cleos启动钱包服务时默认使用的配置文件,改动里面的东西,手动启动keosd时不会去加载。我现在新建了一个文件夹,拷贝config.ini进去,修改地址,然后启动keosd时加载这个配置文件,就可以远程访问钱包服务了。

yuyanray 回复

朋友,远程访问,你说的是rpc吧,rpc的话你需要在/etc下,修改hosts文件里面的127.0.0.1为本机的IP,例如192.168.1.200;还有keosd和nodes是两个不同的服务,你修改配置文件别混淆了;

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册