以docker方式启动以太坊私链,并部署Dapp。
一、查看防火墙状态
首先查看主机防火墙是否开启,如果已开启,需要开放8545
端口,用于外界通过rpc方式访问私链。
查看防火墙状态:
1
| systemctl status firewalld.service
|
{% image https://i.loli.net/2020/09/01/wJPvbiOChzE9VGx.png '防火墙状态' '' %}
开放方法:
1 2
| firewall-cmd --zone=public --add-port=8545/tcp --permanent firewall-cmd --reload
|
二、创建链码
在workspace下,新建/code/chain/mychain
文件夹,创建genesis.json
。
chainId:以太坊的链的id,可以自己随便取值,但是需要注意搭建私链时,这个值不能与以太坊主网或者是测试网的chainId相同。以太坊chainId查询
genesis.json:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| { "config": { "chainId": 666, "homesteadBlock": 0, "eip150Block": 0, "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "ethash": {} }, "nonce": "0x0", "timestamp": "0x5ddf8f3e", "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", "gasLimit": "0x47b760", "difficulty": "0x00002", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000", "alloc": { } }, "number": "0x0", "gasUsed": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" }
|
三、拉取image
1
| docker pull ethereum/client-go
|
四、创建容器
1 2 3
| docker run -it --network=host --name mychain -v /workspace:/workspace --entrypoint /bin/sh ethereum/client-go
docker run -it --name mychain -p 8545:8545 -v /workspace:/workspace --entrypoint /bin/sh ethereum/client-go
|
参数说明:
-i
:打开STDIN,用于控制台交互,常与-t一起使用
-t
:分配tty设备,支持终端登陆,默认为false,常与-i一起使用
--network=host
:将容器的网络模式设置为host模式,即用宿主机的ip和端口进行外部通信
-p 8545:8545
:将宿主机的8545端口映射到dockers容器的8545端口上
--rm
:指定容器停止后自动删除容器(不支持以docker run -d启动的容器 )
-v
:给容器挂载存储卷,挂载到容器的某个目录,这里讲本地的/workspace挂载到了容器的/workspace目录,用来在容器和宿主机之间共享文件
--entrypoint
:覆盖image的入口点,ubuntu环境下docker默认入口点其实是/bin/bash,修改默认入口点是为了不让节点自动运行,稍后会对节点进行自定义配置使其成为私有链节点
此后启动容器就可以,直接通过
五、启动私链
经过上面的命令,此时命令行提示符已经转变。进入之前创建的/workspace/code/chain/mychain
文件夹下,初始化链json
1
| geth --datadir . init genesis.json
|
启动私链,networkid
和rpcaddr
的设置方法同开发者模式。查看输出日志output.log
同上。
1
| geth --datadir . --nodiscover --networkid 1234 --rpc --rpccorsdomain "*" --rpcaddr 0.0.0.0 --rpcport 8545 console --allow-insecure-unlock 2>output.log
|
注意:搭建私链后一定要进行以下测试,看是否能够正常发起交易。
最后更新时间: