Docker部署区块链公链节点的核心是封装程序、挂载持久化数据、开放端口并确保云环境就绪;需重点验证Docker可用性、云平台与系统双层端口放行、数据目录独立挂载防丢失。

用 Docker 在云服务器上部署区块链公链节点,核心是把节点程序封装进容器、挂载持久化数据、开放必要端口,并确保云环境基础就绪。整个过程不复杂但容易忽略几个关键点:Docker 环境是否真正可用、端口是否在云平台和系统双层放行、数据目录是否独立挂载防丢失。
一、云服务器准备:系统 + Docker + 安全组
选一台主流配置的云服务器(如 Ubuntu 20.04 / CentOS 8,2核4G起步),重点检查三件事:
- 安装并启动 Docker:
sudo apt install docker.io(Ubuntu)或yum install docker-ce(CentOS),再运行sudo systemctl enable --now docker - 确认当前用户已加入 docker 组:
sudo usermod -aG docker $USER,否则后续命令需加 sudo - 在云厂商控制台(如阿里云/腾讯云)配置安全组:至少开放 22(SSH)、30303(P2P通信)、8545(HTTP-RPC) 端口,授权对象设为
0.0.0.0/0(测试阶段)或你自己的 IP(生产建议) - 若用 Ubuntu,还需检查 ufw 是否阻止了端口:
sudo ufw status,必要时执行sudo ufw allow 30303
二、拉取镜像并启动节点容器
以以太坊 Geth 公链节点为例(其他链如 FISCO-BCOS、Polygon 原理类似):
- 创建数据目录防止重启丢数据:
mkdir -p ~/ethereum/data - 拉取稳定版镜像:
docker pull ethereum/client-go:stable - 启动容器(全节点模式):
docker run -d --name eth-node \-p 30303:30303 -p 8545:8545 \-v ~/ethereum/data:/root/.ethereum \ethereum/client-go \--syncmode fast \--http --http.addr 0.0.0.0 \--http.api eth,net,web3,admin \--allow-insecure-unlock - 说明:
--syncmode fast比 full 更快同步;--allow-insecure-unlock仅测试用,生产环境应配合账户加密或禁用解锁
三、验证与日常管理
容器跑起来只是第一步,要确认它真正在同步区块、能对外提供服务:
- 查看日志实时输出:
docker logs -f eth-node,留意是否出现Imported new chain segment或Syncing字样 - 检查同步进度:
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' http://localhost:8545,返回result: false表示已同步完成 - 查询最新块高:
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' http://localhost:8545 | jq .result(需装 jq) - 停止/重启节点:
docker stop eth-node、docker start eth-node
四、进阶建议:让节点更稳更安全
上线后别只盯着“能跑”,还得考虑长期可用性和最小权限原则:
- 用
docker-compose.yml替代裸命令,便于管理多个服务(如搭配 Prometheus 监控) - RPC 端口(8545)不要直接暴露公网,建议通过 Nginx 反向代理 + Basic Auth,或仅绑定内网 IP:
--http.addr 127.0.0.1 - 数据卷建议挂载到独立云盘(如阿里云 ESSD),而非系统盘,避免磁盘写满导致节点崩溃
- 定期清理旧镜像和停止容器:
docker system prune -a(慎用,先确认无用容器)











