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

timbrown · September 08, 2018 · Last by gk5 replied at September 25, 2018 · 10095 hits

如题目。我在 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)

不是 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 是两个不同的服务,你修改配置文件别混淆了;

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up