我正在测试一些与比特币相关的代码,为了测试它在bitcoin-testnet-box容器中安装了docker。
运行正常,在容器中我可以执行命令并查看结果。
Dockerfile是exposing port 19001,我将其映射到端口49155
作为其中一个bitcond
实例的RPC端口,我正在尝试使用{{3}与之通信}。
我写了一个简单的测试,目的只是为了解决当前的困难。
var bitcoin = require('bitcoin'),
client = new bitcoin.Client({
host: "192.168.59.103",
port: 49155,
user: "admin1",
pass: "123"
});
describe("Core Wallet Functions", function() {
it("can get the current bitcoin difficulty", function(done){
client.getDifficulty(function(err, difficulty){
console.log("got response", err, difficulty);
expect(err).to.equal(null);
expect(difficulty).to.equal(1);
done();
});
});
});
这是失败的(见下面的更新),错误:
{[错误:连接ECONNREFUSED] 代码:'ECONNREFUSED', 错误:'ECONNREFUSED', 系统调用:'connect'}
快速查看docker ps
节目
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b04ed26d9e3 freewil/bitcoin-testnet-box:latest /bin/bash 3 hours ago Up 8 minutes 0.0.0.0:49155->19001/tcp, 0.0.0.0:49156->19011/tcp bitcoind
我尝试将主机更改为“localhost”和“0.0.0.0”,但结果相同。
很明显,我错过了一些简单的事情,因为node-bitcoin并没有真正做出任何不同的事情。
用于运行bitcoin-testnet-box
的命令是
docker run -ti --name bitcoind -P -p 49155:19001 freewil/bitcoin-testnet-box
我可能做错了什么?
更新
我按照以下建议更改了bitcoin.conf
,现在错误消息是
[Error: Invalid params, response status code: 403]
我的bitcoin.conf
看起来像
# testnet-box functionality
testnet=1
dnsseed=0
upnp=0
rpcallowip=192.168.59.103
rpcallowip=192.168.1.4
rpcallowip=0.0.0.0
# listen on different ports than default testnet
port=19000
rpcport=19001
# always run a server, even with bitcoin-qt
server=1
# enable SSL for RPC server
#rpcssl=1
rpcuser=admin1
rpcpassword=123
另一次更新
值得解释的是,我使用docker
在我的Mac上运行boot2docker
,因此我所指的IP号是运行docker ip
时显示的IP,而不是IP我的Mac本身。我在Mac上使用NodeJS
运行测试,而不是在boot2docker VM或实际的Docker容器中运行。所以,我尝试将rpcallowip=192.168.1.4
(其中192.168.1.4
是我的Mac的IP)添加到我的bitcoind.conf
文件中以防万一。唉,没有任何区别,我仍然得到{ [Error: Invalid params, response status code: 403] code: -32602 }
回复。
我还根据bitcoin.conf文件中的内容对我的用户名和密码进行了三重检查。
根据Chris McKinnel的建议,我在docker容器中运行netstat -tunlp
并显示:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:19000 0.0.0.0:* LISTEN 65/bitcoind
tcp6 0 0 :::19000 :::* LISTEN 65/bitcoind
tcp6 0 0 :::19001 :::* LISTEN 65/bitcoind
tcp6 0 0 :::19011 :::* LISTEN 75/bitcoind
所以我还在rpcallowip=0.0.0.0
文件中添加了bitcoin.conf
。唉,仍然没有区别。
最终解决方案
再次感谢Chris McKinnel设置rpcallowip=*
以下解决了问题。当然,这引发了一个全新的问题,但是当我到达它时,我会烧掉那座桥。现在我可以非常愉快地测试我的比特币流程。
答案 0 :(得分:2)
我认为您需要将rpcallowip=192.168.59.103
添加到节点的两个bitcoin.conf
文件中。默认情况下,bitcoind
只会侦听localhost上的RPC连接(根据the docs)。
将IP添加到允许列表后,您可以通过执行telnet 192.168.59.103 19001
来检查其是否有效。
要查看您的PC打开端口的列表(以及他们接受连接的位置),请执行netstat -tunlp
。
答案 1 :(得分:1)
我只想改变
rpcallowip=192.168.*.*
这样至少在C类范围内