Geth 1.8.3,无法同步到rinkeby.io - 坚持:IPC终端打开

时间:2018-04-04 13:57:53

标签: docker geth

我似乎无法使用最新版本的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

3 个答案:

答案 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 "*" **

消耗存储因为它仍在运行(超过5GB),有时我收到一个错误:设备上没有剩余空间,我删除了所有内容然后重新开始。

我运行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中的信息来引诱这种方法。