Go-Ethereum
geth 控制台無法附加到 geth docker 容器
我再次問這個問題,雖然這裡問了一個類似的問題。我用我讀過的東西回答了這個問題,認為是正確的方法,但它對我也不起作用。
基本上我在 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
並為您提供一個控制台。