Bitcoin-Core

無法為 RPC 伺服器綁定任何端點

  • November 12, 2019

我最近將我的比特幣 docker 映像更新為 bitcoing v0.18.0 版本,現在不能允許外部 rpc 連接到它。如果我設置它會綁定到 localhost rpcallowip=X.X.X.X,然後我也嘗試使用rpcbind參數,但無法將我的 docker 容器設置為允許外部 rpc 連接。

這就是我得到的:

bitcoin_1       | 2019-05-23T13:39:34Z Bitcoin Core version v0.18.0 (release build)
bitcoin_1       | 2019-05-23T13:39:34Z Assuming ancestors of block 0000000000000000000f1c54590ee18d15ec70e68c8cd4cfbadb1b4f11697eee have valid signatures.
bitcoin_1       | 2019-05-23T13:39:34Z Setting nMinimumChainWork=0000000000000000000000000000000000000000051dc8b82f450202ecb3d471
bitcoin_1       | 2019-05-23T13:39:34Z Using the 'sse4(1way),sse41(4way),avx2(8way)' SHA256 implementation
bitcoin_1       | 2019-05-23T13:39:34Z Using RdSeed as additional entropy source
bitcoin_1       | 2019-05-23T13:39:34Z Using RdRand as an additional entropy source
bitcoin_1       | 2019-05-23T13:39:34Z Default data directory /root/.bitcoin
bitcoin_1       | 2019-05-23T13:39:34Z Using data directory /home/BTC
bitcoin_1       | 2019-05-23T13:39:34Z Config file: /home/BTC/bitcoin.conf
bitcoin_1       | 2019-05-23T13:39:34Z Using at most 125 automatic connections (1048576 file descriptors available)
bitcoin_1       | 2019-05-23T13:39:34Z Using 16 MiB out of 32/2 requested for signature cache, able to store 524288 elements
bitcoin_1       | 2019-05-23T13:39:34Z Using 16 MiB out of 32/2 requested for script execution cache, able to store 524288 elements
bitcoin_1       | 2019-05-23T13:39:34Z Using 0 threads for script verification
bitcoin_1       | 2019-05-23T13:39:34Z Binding RPC on address X.X.X.X port XXXX failed.
bitcoin_1       | 2019-05-23T13:39:34Z Unable to bind any endpoint for RPC server
bitcoin_1       | 2019-05-23T13:39:34Z Error: Unable to start HTTP server. See debug log for details.
bitcoin_1       | Error: Unable to start HTTP server. See debug log for details.
bitcoin_1       | 2019-05-23T13:39:34Z Shutdown: In progress...
bitcoin_1       | 2019-05-23T13:39:34Z scheduler thread start
bitcoin_1       | 2019-05-23T13:39:34Z scheduler thread interrupt
bitcoin_1       | 2019-05-23T13:39:34Z Shutdown: done

我的 bitcoin.conf 文件如下所示:

server=1
rpcbind=X.X.X.X
rpcallowip=0.0.0.0/0
rpcport=XXXX
port=XXXX
rpcuser=user
rpcpassword=password

以下是rpcbind使用 0.18.0 版中的最新更改解決問題的方法。

0.18之前,如果放rpcallowip=0.0.0.0/0, 的值rpcbind不需要設置,預設為所有介面。

現在情況不再如此。這是我的設置,用於通過 Docker compose 在容器中執行 bitcoind:

rpcallowip=0.0.0.0/0
rpcbind=127.0.0.1
# local DNS name (container name used in my Docker Compose file)
rpcbind=bitcoind

第一個rpcbind是我可以從容器內部進行 RPC 呼叫。第二個是其他容器可以到達bitcoind容器。

我認為這可以滿足您的要求:

  1. 我可以從bitcoind容器內部進行 RPC
  2. 我可以從同一網路上的另一個容器(在撰寫文件中指定)RPC 到bitcoind容器
  3. 我可以從容器外的本地主機進行 RPC。

最後,我在 compose 文件中將埠 8332 暴露給我的 localhost,然後我可以 curl 到容器:

$ curl --user user --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getbestblockhash", "params": [] }'  -H 'content-type: text/plain;' 127.0.0.1:8332/
Enter host password for user 'user':
{"result":"0000000000000000000ece9381a7e0a4020353f4adde7b560a6b2840d5d44cfa","error":null,"id":"curltest"}

我的容器設置的完整細節在這裡,以防我在寫答案時遺漏了什麼。

如果您查看發行說明,您會發現:

rpcallowip 選項不能再用於自動偵聽所有網路介面。相反,必須使用 rpcbind 參數來指定要偵聽的 IP 地址。通過公共網路連接偵聽 RPC 命令是不安全的,應該禁用,因此如果使用者選擇這樣的配置,現在會列印警告。如果您需要公開 RPC 以使用像 Docker 這樣的工具,請確保您只將 RPC 綁定到您的本地主機,例如 docker run […] -p 127.0.0.1:8332:8332 (這是一個額外的 :8332 在正常的 Docker 埠規範)。

你在評論中說

因為我需要遠端控制我的節點

恐怕對於任何 >= 18 的版本,這都不可行,但正確地給出 rpc 連接沒有加密,這意味著純文字登錄名/密碼,這就是為什麼不推薦/不再可能看到。**似乎不推薦使用遠端 RPC 或 REST 兩種介面之一,**因此您仍然可以這樣做,但必須知道它是不安全的。

我的猜測是,這rpcbind應該是執行比特幣核心的電腦上的內部 IP,並且您應該將外部 RPC 呼叫從內部網路的路由器路由到 的路由器rpcbind

引用自:https://bitcoin.stackexchange.com/questions/87943