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).