我似乎无法使用最新版本的Geth 1.8.3。它会停止,永远不会开始同步。
我正试图通过rinkeby.io testnet进行智能合约测试。
下载并使用ADD
将文件复制到图像后,我在1.7.3上取得了成功。但我希望自动化构建,以便可以使用deployment.yml
在Google云中使用。
目前我正在我的本地机器上进行测试,因为我知道防火墙与1.7.3配合使用。 (没有具体的规则)
Dockerfile构建得很好,我可以看到它显示在rinkeby.io节点列表中,但即使在1小时后也没有同步一个块。
它坚持:IPC endpoint opened
使用1.7.3开始同步需要10-15秒。
Dockerfile
# ----- 1st stage build -----
FROM golang:1.9-alpine as builder
RUN apk add --no-cache make gcc musl-dev linux-headers git curl
WORKDIR /
RUN curl -o rinkeby.json https://www.rinkeby.io/rinkeby.json
RUN git clone https://github.com/ethereum/go-ethereum.git
RUN cd /go-ethereum && make geth
# ----- 2nd stage build -----
FROM alpine:latest
RUN apk add --no-cache ca-certificates
COPY --from=builder rinkeby.json $HOME/rinkeby.json
COPY --from=builder /go-ethereum/build/bin/geth /usr/local/bin/
VOLUME [ "/root/.rinkeby/geth/lightchaindata" ]
EXPOSE 8545 8546 30303 30304 30303/udp 30304/udp
RUN geth --datadir=$HOME/.rinkeby init rinkeby.json
CMD ["sh", "-c", "geth --networkid=4 --datadir=$HOME/.rinkeby --rpcaddr 0.0.0.0 --syncmode=fast --ethstats='Oxy:Respect my authoritah!@stats.rinkeby.io' --bootnodes=enode://a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb4d375b77eab56516d34bfbd3c1a833fc51296ff084b770b94fb9028c4d25ccf@52.169.42.101:30303?discport=30304"]
运行docker镜像时输出。
控制台:
INFO [04-04|13:14:10] Maximum peer count ETH=25 LES=0 total=25
INFO [04-04|13:14:10] Starting peer-to-peer node instance=Geth/v1.8.4-unstable-6ab9f0a1/linux-amd64/go1.9.2
INFO [04-04|13:14:10] Allocated cache and file handles database=/root/.rinkeby/geth/chaindata cache=768 handles=1024
WARN [04-04|13:14:10] Upgrading database to use lookup entries
INFO [04-04|13:14:10] Database deduplication successful deduped=0
INFO [04-04|13:14:10] Initialised chain configuration config="{ChainID: 4 Homestead: 1 DAO: <nil> DAOSupport: false EIP150: 2 EIP155: 3 EIP158: 3 Byzantium: 1035301 Constantinople: <nil> Engine: clique}"
INFO [04-04|13:14:10] Initialising Ethereum protocol versions="[63 62]" network=4
INFO [04-04|13:14:10] Loaded most recent local header number=0 hash=6341fd…67e177 td=1
INFO [04-04|13:14:10] Loaded most recent local full block number=0 hash=6341fd…67e177 td=1
INFO [04-04|13:14:10] Loaded most recent local fast block number=0 hash=6341fd…67e177 td=1
INFO [04-04|13:14:10] Regenerated local transaction journal transactions=0 accounts=0
INFO [04-04|13:14:10] Starting P2P networking
INFO [04-04|13:14:12] UDP listener up self=enode://6d27f79b944aa75787213835ff512b03ec51434b2508a12735bb365210e57b0084795e5275150974cb976525811c65a49b756ac069ca78e4bd6929ea4d609b65@[::]:30303
INFO [04-04|13:14:12] Stats daemon started
INFO [04-04|13:14:12] RLPx listener up self=enode://6d27f79b944aa75787213835ff512b03ec51434b2508a12735bb365210e57b0084795e5275150974cb976525811c65a49b756ac069ca78e4bd6929ea4d609b65@[::]:30303
INFO [04-04|13:14:12] IPC endpoint opened url=/root/.rinkeby/geth.ipc
答案 0 :(得分:0)
从头开始重建Dockerfile后,我确实发现了什么问题。
在CMD
行的末尾有这个结尾。
?discport = 30304
通过删除它,它按预期工作。
这是来自不同用户代码的残余。
答案 1 :(得分:0)
对我来说,问题是快速同步仍然会持续数小时,需要永久而且永远不会自行停止。
我运行了这个命令:
**geth --rinkeby --syncmode "fast" --rpc --rpcapi db,eth,net,web3,personal --cache=1024 --rpcport 8545 --rpcaddr 127.0.0.1 --rpccorsdomain "*" **
我运行eth.syncing,这是我得到的:
https://imgur.com/a/fj2fvpy(同步3小时后)
https://imgur.com/a/SqrnW8x(第一次eth.syning检查后30分钟)
我尝试100 * eth.syncing.currentBlock / eth.syncing.highestBlock
并且 99.9969 ....然后它一直在减速和减少,从未达到 99.9970 。
我在Ubuntu 16.04LTS上运行 Geth / v1.8.4-stable-2423ae01 / linux-amd64 / go1.10
答案 2 :(得分:0)
经过一遍又一遍的研究,我发现使用'--bootnodes'标志是使您的私有对等点通过网络相互识别的最简单方法:
Geth.exe --bootnodes "enode://A@B:30303" --datadir="C:\Ledger"--nat=extip:192.168.0.9 ...
旋转IPC管道时,请指定一个可能一直处于运行状态的节点(可能是您的第一个初始化节点)。您还需要使用'--nat'标志非常明确地说明IP地址。在上面的示例中,A是将用于自动检测所有其他节点并建立对等连接的节点的IP地址。
我使用Geth Github网站上此link中的信息来引诱这种方法。