Go-Ethereum

geth 控制台無法附加到 geth docker 容器

  • June 29, 2021

我再次問這個問題,雖然這裡問了一個類似的問題。我用我讀過的東西回答了這個問題,認為是正確的方法,但它對我也不起作用。

基本上我在 docker 容器中執行一個 geth 實例,並嘗試從我的主機連接 geth 控制台。

The docker command is as follows:

if [ $# -eq 0 ]
 then
   echo "No arguments supplied"
else
 docker container run --network etherdev_net --rm --name etherdev_$1 -p 8545:8545 -v $gethdir/$1:/root/.ethereum -v $gethdir/$1/.ethash:/root/.ethash -v $bootnodedir:/root/bootnode etherdev
fi

docker 容器入口點基本上呼叫一個 shell 腳本

geth --networkid 5493 --bootnodes "$(echo -n 'enode://'; bootnode --writeaddress -nodekey /root/bootnode/nodekeyfile | tr -d '\n'; echo '@192.168.2.2:30301')" --mine --rpc --rpcport "8545" --port "30303" --rpccorsdomain "*" --nat "any" --rpcapi eth,web3,personal,net --etherbase 0 --unlock "$(cat /root/.ethereum/geth/security/coinbase)" --password /root/.ethereum/geth/security/password.sec

然後我在主機上執行此命令以附加一個 geth 控制台,但它返回錯誤消息“致命:無法啟動 JavaScript 控制台:api 模組:發布 http://localhost:8545:EOF”

geth attach http://localhost:8545

如果我執行“docker container exec -it … /bin/sh”,我已經驗證可以使用相同的命令“geth attach http://localhost:8545”連接到 geth

這裡有什麼問題?8545埠是否發布不正確?

這是因為您在嘗試連接時使用了環回介面。只需嘗試使用:

docker run --rm -it ethereum/client-go \
attach http://$(ip route \
|grep "default via" \
|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' \
|grep -m2 "" \
|tail -1):8545

在 docker 容器外執行時,它會像遠端系統一樣連接。並且geth attach無法使用geth attach. 這個答案更詳細地解釋了它。

您的問題的解決方案可以是web3-console。您可以按如下方式使用它:

npm install -g @digix/web3-console
web3-console

這將建立一個 web3 連接localhost:8545並為您提供一個控制台。

引用自:https://ethereum.stackexchange.com/questions/42283