Я тестирую некоторый код, связанный с биткойнами, и для его проверки я установил bitcoin-testnet-box внутри контейнера docker.
Он работает нормально, и внутри контейнера я могу выполнять команды и видеть результаты.
Dockerfile открывает порт 19001, который я сопоставляю на порт 49155
в качестве порта RPC для одного из экземпляров bitcond
, и я пытаюсь связаться с ним, используя 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] код: 'ECONREFUSED', номер ошибки: 'ECONREFUSED', системный вызов: '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, на который я ссылаюсь, — это IP-адрес, который отображается, когда я запускаю docker ip
, а не IP-адрес самого моего Mac. Я запускаю тест, используя NodeJS
на своем Mac, а не в виртуальной машине boot2docker или в реальном контейнере Docker. Итак, на всякий случай я попытался добавить rpcallowip=192.168.1.4
(где 192.168.1.4
— IP-адрес моего Mac) в свои файлы bitcoind.conf
. Увы, это не имело значения, я все еще получаю ответ { [Error: Invalid params, response status code: 403] code: -32602 }
.
Я также трижды сверил свое имя пользователя и пароль с тем, что находится в файле bitcoin.conf.
Согласно предложению Криса Маккиннела ниже, я запустил 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
. Увы, по-прежнему никакой разницы.
наконец-то решение
Еще раз спасибо Крису МакКиннелу, ниже установка rpcallowip=*
решила проблему. Конечно, это поднимает совершенно новую проблему, но я сожгу этот мост, когда доберусь до нее. На данный момент я вполне могу тестировать свои биткойн-процессы.