Apache IoTDB Docker Compose 部署指南
使用 Docker Compose 在 Ubuntu 22.04 上快速部署安装 Apache IoTDB 2.0.11(standalone),覆盖镜像选型、compose 编排、数据持久化、常用环境变量与等价 docker run 运行方式。
Apache IoTDB Docker Compose 部署指南
目标:用 Docker Compose 一条命令在 Ubuntu 22.04 上启动 Apache IoTDB 2.0.11 单机(standalone,一体包含 ConfigNode 与 DataNode),并完成数据持久化、配置注入与常用运维验证。已验证官方镜像
apache/iotdb:latest实为 2.0.11(iotdb-*-2.0.11.jar、SHOW VERSION显示 2.0.11)。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS,x86_64
- Docker / Docker Compose v2(
docker compose子命令) - 镜像:
apache/iotdb:2.0.11 - 镜像默认工作目录:
/iotdb/sbin;默认启动命令:bash -c "entrypoint.sh all"(standalone) - 镜像内目录:配置
/iotdb/conf、数据/iotdb/data、日志/iotdb/logs - 暴露端口:
6667/tcp(CLI 与 RPC) - 关键端口:
6667(CLI/RPC)、10710(ConfigNode RPC)、10730(DataNode 内部 RPC)、9092(Prometheus 指标) - 测试账号:root / 密码
q1w2e3r4(由默认root修改而来) - 版本:Apache IoTDB 2.0.11(Build 7c0de06)
二、镜像选型说明
| 镜像 | 说明 | 建议 |
|---|---|---|
apache/iotdb:latest | 官方最新,当前为 2.0.11 | 快速体验/调试 |
apache/iotdb:2.0.11 | 官方 2.0.11 固定标签 | 生产固定版本 |
apache/iotdb:2.0.10 | 官方 2.0 稳定线前序版本 | 需要旧系时 |
| 其他第三方镜像 | 来源与构建不可控 | 不推荐 |
💡 说明:官方镜像内置完整
sbin(start-standalone.sh等)、lib与conf,与 tar 包部署的配置文件/目录结构一致,版本间切换只需改动image:标签即可。
三、前置条件
- 已安装 Docker Engine 与 Docker Compose v2(建议 Compose 1.27.3+)。
- 具备拉取
docker.io镜像的网络能力并配置好镜像加速(若使用国内加速源,个别标签可能出现 502/denied,重试或换加速源即可)。 - 至少分配 2GB 内存给该服务(ConfigNode + DataNode 双进程),并按需求注入 JVM 堆参数。
四、部署步骤
4.1 准备编排目录与 compose 文件
mkdir -p /opt/iotdb-compose
cat > /opt/iotdb-compose/docker-compose.yml <<'EOF'
services:
iotdb:
image: apache/iotdb:2.0.11
container_name: iotdb
restart: unless-stopped
environment:
- MST_JVM_OPTS=-Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m
- MEMORY_SIZE=512M
ports:
- "6667:6667"
- "10710:10710"
- "10730:10730"
- "9092:9092"
volumes:
- iotdb-data:/iotdb/data
- iotdb-logs:/iotdb/logs
ulimits:
nofile:
soft: 65535
hard: 65535
volumes:
iotdb-data:
iotdb-logs:
EOF
💡 说明:
MST_JVM_OPTS与MEMORY_SIZE会被镜像内datanode-env.sh/confignode-env.sh读取,用于把两个进程的堆限制在 512MB(见「六、常用环境变量表」)。
4.2 启动服务
cd /opt/iotdb-compose
docker compose up -d
docker compose ps
实测(对应服务)回显:
NAME IMAGE COMMAND SERVICE STATUS PORTS
iotdb apache/iotdb:2.0.11 "bash -c entrypoint.sh all" iotdb Up 3 minutes 0.0.0.0:6667->6667/tcp, 0.0.0.0:10710->10710/tcp, 0.0.0.0:10730->10730/tcp, 0.0.0.0:9092->9092/tcp
💡 说明:以上为
docker compose ps的示意输出(列宽与排序略作收拢,命令与端口为实际映射值)。
4.3 验证进程与端口
进入运行中的容器确认两个进程并核对 JVM 堆:
docker exec -it iotdb bash -c 'jps -v'
回显(摘录关键 JVM 参数,主类与堆设置):
org.apache.iotdb.confignode.service.ConfigNode -Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m
org.apache.iotdb.db.service.DataNode -Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m
端口(docker exec -it iotdb netstat -tlnp 摘录):
tcp6 0 0 127.0.0.1:6667 :::* LISTEN 3684/java
tcp6 0 0 127.0.0.1:10710 :::* LISTEN 3592/java
tcp6 0 0 127.0.0.1:10730 :::* LISTEN 3684/java
4.4 用 CLI 验证建库建测点与查询
进入容器并用 CLI 连接(默认账号 root/root,先改成公共演示密码 q1w2e3r4):
docker exec -it iotdb bash
cd /iotdb
sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root -e "ALTER USER root SET PASSWORD \"q1w2e3r4\";"
sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw q1w2e3r4 -e "SHOW VERSION;"
回显:
Msg: The statement is executed successfully.
+-------+---------+
|Version|BuildInfo|
+-------+---------+
| 2.0.11| 7c0de06|
+-------+---------+
Total line number = 1
It costs 0.026s
建库建测点、插入与查询(同 tar 部署,实测通过):
sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw q1w2e3r4 -e "CREATE DATABASE root.iot;"
sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw q1w2e3r4 -e "CREATE TIMESERIES root.iot.sensor.temperature WITH DATATYPE=FLOAT, ENCODING=PLAIN, COMPRESSOR=SNAPPY;"
sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw q1w2e3r4 -e "INSERT INTO root.iot.sensor(timestamp, temperature) VALUES (1690000000000, 25.5);"
sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw q1w2e3r4 -e "SELECT * FROM root.iot.sensor;"
回显(查询部分):
+------------------------+---------------------------+
| Time|root.iot.sensor.temperature|
+------------------------+---------------------------+
|2023-07-22T04:26:40.000Z| 25.5|
+------------------------+---------------------------+
Total line number = 1
五、数据持久化说明
- 通过命名卷
iotdb-data:/iotdb/data持久化数据与 WAL、iotdb-logs:/iotdb/logs持久化日志。 - 即使
docker compose down后重建容器,数据仍保留在命名卷中,容器删除不丢数据。 - 若要备份数据,可直接备份卷:
docker run --rm -v iotdb-data:/data -v /backup:/backup alpine tar czf /backup/iotdb-data.tar.gz -C /data .
六、常用环境变量表
| 环境变量 | 说明 | 默认 |
|---|---|---|
MEMORY_SIZE | 由脚本计算结果得到的每个节点内存上限,格式如 512M/2G | 按系统自动计算(1/2 内存) |
MST_JVM_OPTS / IOTDB_JMX_OPTS | 直接注入 JVM 参数,优先级最高;含 -Xms/-Xmx/-XX:MaxDirectMemorySize | 空 |
IOTDB_* | replace-conf-from-env.sh 支持把 IOTDB_ 前缀环境变量写入 conf/iotdb-system.properties(如 IOTDB_DN_RPC_PORT=6667) | 空 |
⚠️ 注意:
MST_JVM_OPTS若包含-Xmx,会覆盖环境脚本里ON_HEAP_MEMORY的设定;保持-Xms与-Xmx一致可避免抖动。
七、常用配置参数说明(command)
官方镜像默认 COMMAND 为 bash -c "entrypoint.sh all",即 standalone。可在 compose 的 command: 覆盖:
| command | 行为 |
|---|---|
bash -c "entrypoint.sh all"(默认) | 同时启动 ConfigNode + DataNode(单机) |
bash -c "start-confignode.sh" | 仅启动 ConfigNode(集群拆分场景) |
bash -c "start-datanode.sh" | 仅启动 DataNode(集群拆分场景) |
💡 说明:单机直接保持默认即可;多节点集群时用不同 compose/构建分别在多台机器部署 Confignode 与 DataNode,并统一
cn_seed_config_node。
八、配置文件持久化(conf 挂载)
如需把自定义 conf/iotdb-system.properties、conf/datanode-env.sh 落到宿主机统一管理,可加 bind mount:
mkdir -p /opt/iotdb-compose/conf
cp <你的服务器>/apache-iotdb-2.0.11-all-bin/conf/iotdb-system.properties /opt/iotdb-compose/conf/
在 compose 的 volumes: 追加:
volumes:
- iotdb-data:/iotdb/data
- iotdb-logs:/iotdb/logs
- /opt/iotdb-compose/conf/iotdb-system.properties:/iotdb/conf/iotdb-system.properties
⚠️ 注意:把宿主机文件 bind 进容器前先备份镜像内原始配置;写坏配置会导致启动失败,可
docker compose down并移除该 bind 后重新up -d。
九、等价 docker run 运行方式
不用 compose 时,等价的一条 docker run:
docker run -d --name iotdb \
-p 6667:6667 -p 10710:10710 -p 10730:10730 -p 9092:9092 \
-e MST_JVM_OPTS="-Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m" \
-e MEMORY_SIZE=512M \
-v iotdb-data:/iotdb/data -v iotdb-logs:/iotdb/logs \
--ulimit nofile=65535:65535 \
--restart unless-stopped \
apache/iotdb:2.0.11
十、常用运维命令
docker compose -f /opt/iotdb-compose/docker-compose.yml ps # 查看状态
docker compose -f /opt/iotdb-compose/docker-compose.yml logs -f # 跟踪日志
docker compose -f /opt/iotdb-compose/docker-compose.yml restart # 重启
docker compose -f /opt/iotdb-compose/docker-compose.yml down # 停止(数据仍在命名卷)
docker compose -f /opt/iotdb-compose/docker-compose.yml down -v # 停止并删除命名卷(清数据,慎用)
进入容器并交互使用 CLI:
docker exec -it iotdb bash
cd /iotdb
sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw q1w2e3r4
交互模式连接成功横幅(实测):
---------------------
Starting IoTDB Cli
---------------------
_____ _________ ______ ______
|_ _| | _ _ ||_ _ `.|_ _ \
| | .--.|_/ | | \_| | | `. \ | |_) |
| | / .'`\ \ | | | | | | | __'.
_| |_| \__. | _| |_ _| |_.' /_| |__) |
|_____|'.__.' |_____| |______.'|_______/ version 2.0.11 (Build: 7c0de06)
Successfully login at 127.0.0.1:6667
IoTDB>
十一、常见问题(FAQ)
Q1:docker pull apache/iotdb:2.0.11 报 denied 或 502 Bad Gateway?
原因:多为镜像加速源临时故障或该标签在加速源未同步。换用 apache/iotdb:latest(当前即 2.0.11),或更换加速源后重试。
Q2:容器启动后 nofile 超限导致连接被拒?
原因:默认文件句柄数不足。compose 中通过 ulimits 设置为 65535,或用 --ulimit nofile=65535:65535 覆盖。
Q3:用宿主机 6667 联不通?
原因:检查端口映射与容器内进程是否就绪。先 docker compose logs 看日志中出现 IoTDB DataNode is set up successfully 后再连接。
Q4:改了 env 变量的 JVM 参数不生效?
原因:-Xmx 只认 MST_JVM_OPTS/IOTDB_JMX_OPTS;若同时在环境脚本里写死了 ON_HEAP_MEMORY,会被 IOTDB_JMX_OPTS 中的 -Xmx 覆盖。修改后用 docker exec -it iotdb jps -v 核对。
十二、参考链接
- 官方镜像:
https://hub.docker.com/r/apache/iotdb - Apache IoTDB 文档:
https://iotdb.apache.org/ - 配置文件参数说明见《Apache IoTDB 配置参数详解》篇;非容器的手工安装见《Ubuntu 22.04 安装 Apache IoTDB 2.0.11 指南》篇。