Docker¶
我们在docker hub上托管了最新版本的快照(将来会提供发行版),你可以通过如下步骤运行:
准备工作¶
运行镜像之前,你需要获取最新的版本并准备好数据目录: Before running the image, you should pull the latest version and prepare
# 从dockerhub获取最新的版本(再次执行相当于更新)
docker pull ethereum/client-cpp
# 创建可挂载的数据目录,区块链/帐号数据将存放于此
mkdir -p ~/.ethereum ~/.web3
以上这些步骤只需要执行一次,如果想要更新版本,只需哟啊重新执行: docker pull ...
。
执行阶段¶
最简单的用法就是执行下面的命令:
docker run --rm -it \
-p 127.0.0.1:8545:8545 \
-p 0.0.0.0:30303:30303 \
-v ~/.ethereum:/.ethereum \
-v ~/.web3:/.web3 \
-e HOME=/ \
--user $(id -u):$(id -g) \
ethereum/client-cpp
这将会把数据写入 ~/.ethereum
和 ~/.web3/
目录,并且以当前用户的权限去执行客户端,在大多数情况下这个命令是够用的,客户端端行为就像是在本地构建的一样。
如果你想开通rpc端口以便可以从外部网络访问(不推荐,如果你的机器上有私钥或者其它任何有价值的内容,永远不要这样做),请使用 -p 0.0.0.0:8545:8545
来替代上文中的 -p 127.0.0.1:8545:8545
。
方便起见,你可以创建一个包含如下内容的文件 /usr/local/bin/docker-eth
#!/usr/bin/env sh
mkdir -p ~/.ethereum ~/.web3
if ! id -nG $(whoami)|grep -qw "docker"; then SUDO='sudo'; else SUDO=''; fi
$SUDO docker run --rm -it \
-p 127.0.0.1:8545:8545 \
-p 0.0.0.0:30303:30303 \
-v ~/.ethereum:/.ethereum \
-v ~/.web3:/.web3 \
-e HOME=/ \
--user $(id -u):$(id -g) \
ethereum/client-cpp $@
使用如下命令来给文件添加执行权限: chmod +x /usr/local/bin/docker-eth
,你可以通过如下命令直接启动客户端:
docker-eth
Note: 命令 docker-eth
会接受和 eth
一样的参数标志。
如果想附加到节点上,你可以使用mist(它将自动检测节点)、使用geth命令 geth attach ipc:/$HOME/.ethereum/geth.ipc
、或者使用运行着的以太坊命令行。
进阶方法¶
由于这个问题(https://github.com/docker/libnetwork/issues/552)组播在没有 --net=host
参数时不会进行。你可以继续在网络隔离的情况下使用客户端,或者使用 -p 127.0.0.1:8545:8545 -p 30303:30303 -p 30303:30303/udp
发布rpc、p2p和discovery端口,如果你想被外网探测到,你还需要:
- 通过
--public-ip
标志添加你的公网IP地址 - 通过NAT映射你的端口
(syncing will still work without it).