apache/iceberg-rest-fixtureApache Iceberg Rest Fixture 是一个轻量级的 Docker 镜像,用于快速部署模拟的 Apache Iceberg REST 服务端点。该镜像旨在为开发、测试和集成验证场景提供便捷的 Iceberg REST API 环境,无需部署完整的 Iceberg 集群或依赖外部存储服务。其核心目标是降低 Iceberg 客户端开发、功能演示和自动化测试的门槛。
通过 docker run 快速启动内存模式的服务:
bashdocker run -d -p 8181:8181 --name iceberg-rest-fixture apache/iceberg-rest-fixture:latest
-p 8181:8181:映射容器内默认端口(8181)到主机。--name iceberg-rest-fixture:指定容器名称,便于后续操作(如日志查看、停止)。镜像支持通过环境变量自定义服务行为,常用配置如下:
| 环境变量 | 描述 | 默认值 | 可选值 |
|---|---|---|---|
PORT | 服务监听端口 | 8181 | 1-65535 间整数 |
STORAGE_TYPE | 元数据存储类型 | memory | memory(内存)、file(文件系统) |
METADATA_PATH | 元数据存储路径(仅 file 模式) | /tmp/iceberg-metadata | 容器内绝对路径 |
LOG_LEVEL | 日志输出级别 | INFO | DEBUG、INFO、WARN、ERROR |
ALLOW_CORS | 是否允许跨域请求 | false | true、false |
使用文件系统存储元数据(需持久化测试数据时):
bashdocker run -d \ -p 8182:8182 \ -e PORT=8182 \ -e STORAGE_TYPE=file \ -e METADATA_PATH=/data/iceberg-metadata \ -v $(pwd)/local-metadata:/data/iceberg-metadata \ # 挂载主机目录到容器,实现数据持久化 --name iceberg-rest-fixture-file \ apache/iceberg-rest-fixture:latest
适用于多服务集成测试场景(如同时启动 Iceberg Rest Fixture 和客户端应用):
yaml# docker-compose.yml version: '3.8' services: iceberg-rest: image: apache/iceberg-rest-fixture:latest container_name: iceberg-rest-fixture ports: - "8181:8181" environment: - PORT=8181 - STORAGE_TYPE=memory - LOG_LEVEL=DEBUG # 调试模式下输出详细请求日志 restart: unless-stopped # 示例:Iceberg 客户端测试容器(如 Python/Java 客户端) test-client: image: python:3.9-slim container_name: iceberg-test-client depends_on: - iceberg-rest command: ["sleep", "3600"] # 保持容器运行,便于手动执行测试命令
启动命令:docker-compose up -d
默认内存模式下,服务重启后数据会丢失。如需在测试中保留元数据,可通过以下方式实现:
文件系统存储 + 卷挂载(推荐):
如上文 STORAGE_TYPE=file 示例,将容器内 METADATA_PATH 挂载到主机目录,实现元数据持久化。
外部存储集成(高级场景):
通过自定义配置文件(需挂载配置卷)指定外部存储(如 S3、GCS),但需额外提供存储访问密钥(不推荐测试环境使用)。
服务启动后,可通过 HTTP 请求调用 Iceberg REST API,以下为常用操作示例:
bashcurl http://localhost:8181/v1/health # 响应:{"status":"UP","version":"1.0.0"}
bashcurl -X POST http://localhost:8181/v1/catalogs/default/tables \ -H "Content-Type: application/json" \ -d '{ "identifier": "test_db.test_table", "schema": { "type": "struct", "fields": [ {"name": "id", "type": "int", "required": true}, {"name": "data", "type": "string", "required": false} ] }, "location": "s3://test-bucket/test_db/test_table" # 仅为模拟路径,实际存储由 STORAGE_TYPE 控制 }'
bashcurl http://localhost:8181/v1/catalogs/default/tables/test_db.test_table
STORAGE_TYPE=memory 模式下,容器重启或崩溃会导致所有元数据丢失,需提前备份关键测试数据。PORT 环境变量自定义端口(如 -e PORT=8282),并调整主机端口映射(如 -p 8282:8282)。

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务