You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Kadena devnet创建数据库快照实现快速启动

Kadena devnet 持久化数据库跳过初始化等待配置方案

你可以通过自定义Compose覆盖配置实现数据库持久化,首次初始化后后续所有启动都不需要再等待1小时区块同步,具体操作步骤如下:

1. 编写devnet.yaml覆盖配置

在devnet项目根目录新建devnet.yaml文件,以下是可直接使用的配置示例,通过Docker命名卷持久化节点数据:

version: "3.8"

services:
  node0:
    extends:
      file: docker-compose.yaml
      service: node0
    volumes:
      - kadena-devnet-db:/root/.kadena

# 如果你测试时需要启动多节点,按相同格式给每个节点追加独立的存储卷即可
#  node1:
#    extends:
#      file: docker-compose.yaml
#      service: node1
#    volumes:
#      - kadena-devnet-db-node1:/root/.kadena

volumes:
  kadena-devnet-db:

如果需要把数据库文件直接存在宿主机方便拷贝快照,可以把node0下的volumes配置替换为本地路径挂载形式:

volumes:
      - ./devnet-snapshot:/root/.kadena

配置生效后节点所有区块数据会直接存在当前目录的devnet-snapshot文件夹下。

2. 首次启动完成初始化

启动时需要同时加载默认Compose配置和你自定义的devnet.yaml覆盖配置:

docker compose -f docker-compose.yaml -f devnet.yaml up -d

首次启动仍需等待区块高度达到165的分叉高度,可通过以下命令查询0号链高度确认进度:

curl http://localhost:8080/chainweb/0.0/devnet01/chain/0/height

当返回的高度值≥165时,初始化完成,所有数据已经写入持久化存储。

3. 后续使用与快照制作

  • 日常停止服务时不要加-v参数,直接执行docker compose -f docker-compose.yaml -f devnet.yaml down即可,停止容器不会删除持久化的数据库,下次用相同的up命令启动,会直接从上次停止的高度继续运行,无需重新等待初始化。
  • 制作可复用快照时,先执行down命令停止节点,避免拷贝过程中数据库文件损坏:
    • 用本地路径挂载的场景,直接把devnet-snapshot文件夹打包压缩即可,新环境使用时直接解压到对应路径,启动devnet就能直接用。
    • 用Docker命名卷的场景,执行以下命令可以把卷内数据导出为压缩包:
      docker run --rm -v kadena-devnet-db:/data -v $(pwd):/backup alpine tar zcf /backup/devnet-initialized-snapshot.tar.gz -C /data .
      
      新环境使用时先创建同名卷,再把压缩包内容解压到卷内即可直接启动,跳过初始化等待。

注意事项

  • 不要在节点运行过程中直接拷贝数据库文件做快照,大概率会出现数据损坏导致节点无法启动。
  • 如果后续升级devnet版本存在新的分叉高度,只需要在升级后首次启动时等待一次高度达标,之后持久化的数据可以继续复用。

内容的提问来源于stack exchange,提问作者trh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:33:16