我正在测试一些与比特币相关的代码,并且为了测试它已在bitcoin-testnet-box容器中安装了docker

运行正常,在容器中,我可以执行命令并查看结果。

Dockerfile是exposing port 19001,我将其映射到端口49155作为bitcond实例之一的RPC端口,并且尝试使用node-bitcoin与之通信。

我写了一个简单的测试,目的只是为了解决当前的困难。

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”,
errno:“ECONNREFUSED”,
syscall:'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 tests并没有做任何不同的事情。

用于运行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,而不是Mac本身的IP。我在Mac上而不是boot2docker VM或实际Docker容器中使用NodeJS运行测试。因此,我也尝试将rpcallowip=192.168.1.4(其中192.168.1.4是我的Mac的IP)添加到我的bitcoind.conf文件中,以防万一。 that没什么关系,我仍然收到{ [Error: Invalid params, response status code: 403] code: -32602 }响应。

我还对我的用户名和密码和bitcoin.conf文件中的内容进行了三重检查。

根据克里斯·麦克金奈尔的以下建议,我已经在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。 las仍然没有区别。

终于是解决方案

再次感谢Chris McKinnel,通过设置rpcallowip=*解决了该问题。当然,这提出了一个新的问题,但是当我到达那座桥时,我会把它烧掉。现在,我可以很开心地测试我的比特币过程。

最佳答案

我认为您需要将rpcallowip=192.168.59.103添加到这两个 Node 的bitcoin.conf文件中。默认情况下,bitcoind将仅监听localhost上的RPC连接(根据the docs)。

将IP添加到允许列表后,可以通过执行telnet 192.168.59.103 19001来检查其是否起作用。

要查看您的PC打开端口的列表(以及它们从何处接受连接),请执行netstat -tunlp

09-26 02:51