Docker Compose 构建 TiKV 镜像报 cannot allocate memory 错误怎么处理?
Docker Compose 构建 TiKV 镜像报 cannot allocate memory 错误怎么处理【免费下载链接】tikvDistributed transactional key-value database, originally created to complement TiDB项目地址: https://gitcode.com/GitHub_Trending/ti/tikv在 TiKV 仓库提供的 docker-compose 环境中3 个 PD 节点 3 个 TiKV 节点单机部署如果你把 docker-compose.yml 改成从源码构建镜像添加build:段后执行docker-compose build tikv1 tikv2 tikv3构建过程中很可能报cannot allocate memory错误。仓库文档 docker-compose.README.md 明确说明从源码构建 TiKV 需要大量内存建议可用内存 8GB 以上。本文按该文档给出的处理方案从高成本方案到默认免构建路径依次说明并给出完成后的验证方式。前提条件文档 docker-compose.README.md 对构建环境的要求Docker Engine 20.10 或更高版本Docker Compose v2或 docker-compose 1.29 及以上至少 8GB 可用内存从源码构建 TiKV 时必需数据卷至少 10GB 磁盘空间建议值。另外macOS 上 Docker Desktop 使用docker compose带空格而不是docker-compose带连字符文中命令在 macOS 上需要相应替换。为什么构建会吃这么多内存docker-compose.README.md 在 Prerequisites 一节指出构建失败时应对照 troubleshooting 一节处理报错的直接原因是构建 TiKV 源码Rust 编译过程内存消耗大而 Docker 可用的内存不足 8GB。文档建议的处理顺序是先给构建过程更多内存或者干脆不构建、改用预构建镜像。方案一提高 Docker 的内存上限这是文档给出的第一个处理方向适用于内存本身不足 8GB 的场景Docker DesktopMac/Windows进入 Settings → Resources → Advanced把 Memory 调到至少 8GBLinux确保 Docker 能访问到足够的系统内存。调整后重新执行构建命令即可。方案二用 buildx 提高单次构建的内存限制如果你在使用 Docker buildx可以在构建命令上直接限制内存# Build with increased memory limit (if using Docker buildx) docker buildx build --memory8g -t tikv:latest -f Dockerfile . # Or build normally if your system has enough RAM docker build -t tikv:latest -f Dockerfile .第二条是普通构建方式系统内存足够8GB时可以直接docker build。构建产物镜像标签为tikv:latest。方案三文档默认路径直接使用预构建镜像docker-compose.yml 默认不从源码构建而是使用 Docker Hub 上的预构建 nightly 镜像pingcap/tikv:nightly和pingcap/pd:nightly。也就是说只要你没有手动给 TiKV 服务添加build:段就根本不会触发cannot allocate memory构建错误。按文档的 Quick Start 直接启动docker-compose up -d如果你希望用最新稳定版而不是 nightly编辑 docker-compose.yml 修改镜像标签pingcap/tikv:nightly改为pingcap/tikv:latestpingcap/pd:nightly改为pingcap/pd:latest然后再执行docker-compose up -d。方案四在内存更大的机器上构建再导入镜像文档还给出了一条离线迁移路径在一台内存更大的机器上完成构建把镜像导出再导入目标机器。# On build machine docker build -t tikv:latest -f Dockerfile . docker save tikv:latest | gzip tikv-image.tar.gz # On target machine docker load tikv-image.tar.gz注意docker save tikv:latest | gzip tikv-image.tar.gz会在构建机上生成一个tikv-image.tar.gz归档文件镜像体积较大确保磁盘空间充足目标机器上docker load会据此还原tikv:latest镜像。结果验证无论采用哪个方案启动后用文档给出的命令确认集群状态# 查看各服务运行状态 docker-compose ps # 通过 PD API 检查集群健康 curl http://localhost:23791/pd/api/v1/healthTiKV 节点状态可以通过 status 端口检查docker-compose.yml 中 TiKV 服务健康检查即访问该地址http://localhost:20181/statushttp://localhost:20182/statushttp://localhost:20183/status如果状态异常用文档给出的日志命令进一步查看docker-compose logs tikv1 docker exec tikv-tikv1 tail -n 100 /logs/tikv.log相关限制从源码构建必须显式开启文档说明 docker-compose.yml 默认使用预构建镜像只有编辑 docker-compose.yml、移除image: pingcap/tikv:nightly行并添加build:段指向仓库根目录的 Dockerfile后才会执行docker-compose build tikv1 tikv2 tikv3。因此内存报错只发生在主动开启源码构建的场景构建时仍需 8GB 内存。构建机资源不足时文档给出的出路只有提高 Docker 内存、换更大内存的机器构建或改用预构建镜像没有提供降低内存需求的构建参数。【免费下载链接】tikvDistributed transactional key-value database, originally created to complement TiDB项目地址: https://gitcode.com/GitHub_Trending/ti/tikv创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考