Running in Docker
参考官方的Running in Docker,具体的解释如下:
运行节点
拉取镜像:
docker pull ethereum/client-go
启动一个节点:
docker run -it -p 30303:30303 ethereum/client-go
启动一个节点并在8545上运行JSON-RPC接口:
docker run -it -p 8545:8545 -p 30303:30303 ethereum/client-go --rpc --rpcaddr "0.0.0.0"
注意:“0.0.0.0”参数会在8545接口上接收所有主机发送的请求,公共网络慎用!
使用javascript控制台进行交互操作,可运行下命令启动节点:
docker run -it -p 30303:30303 ethereum/client-go console
指定区块链数据存储位置
docker run -it -p 30303:30303 -v /path/on/host:/root/.ethereum ethereum/client-go
-v参数指定了存储的路径。上面的命令会将/root/.ethereum挂载到本地路径/path/on/host下面。这样,容器启动以后,数据的实际存储路径就在/path/on/host下。
使用启动的节点
运行上面的命令后,节点会自动去拉取主网的区块数据。我们可以连接到运行的容器中去执行各个操作。
运行docker ps -a
查看容器实例。
|
|
执行命令docker exec -it eloquent_wiles /bin/sh
,其中eloquent_wiles是容器的名字。这样,它就连接到了现在运行的容器了。
示例操作:
|
|
默认情况下,当节点启动时会在 datadir 指定的目录之下,生成一个名字为 geth.ipc 的文件,当程序关闭时此文件随之消失。可以使用–ipcpath参数修改掉路径。可以配合 attach 命令来进入与 geth 节点进行 js 交互的窗口。基本命令为:/geth attach rpc:/path/on/host/geth.ipc
关于eth.blockNumber返回0的原因可以查看:
个性化Docker启动命令
先来一条执行的命令:
|
|
Docker参数
-it:交互式运行模式,-i 标准输入给容器,-t 分配一个虚拟终端
-d:以守护进程方式运行(后台)
-p:指定端口号
-P:随机分配端口号
–name:指定容器名称
–network:指定网络连接
–ip:分配ip地址
Ethereum参数
–rinkeby:运行rinkeby网络,不设置默认为主网。
–rpc:启用HTTP-RPC服务
–rpcaddr:HTTP-RPC服务监听接口(默认:localhost)
–rpcapi:HTTP-RPC接口提供的api(默认:eth、net、web3)
–fast:快速同步模式启动Geth
–cache=512:内存容量分配
–dev:开发模式
–nodiscover:关闭节点自动发现,允许手动连接
–networkid:设置隔离网络(主网络id为1)
–verbosity 日志等级:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)
console:进入JavaScript控制台
更多的参数可以见下节。
geth命令
geth的命令可以在客户端运行geth -help
或者在Command Line Options中查看。
中文资料可以参考:以太坊客户端Geth命令用法-参数详解
实战经验
- 关于数据目录。启动时一定要指定一个足够大硬盘的路径,不建议使用默认路径,此路径在后面使用的过程中会频繁用到,如果私钥文件没有单独存储,那么也将存储在此目录下。
- keystore 目录下的文件一定要慎重保管,一旦丢失将永远丢失对应地址上的资产,它们和创建账户时设置的密码一一匹配。
- 在真实生产环境中 rpcapi 的 personal、admin 等级别较高的操作权限慎重开启,一旦使用不当会导致系统安全问题。