Apache Cassandra 是一个高度可扩展的分布式 NoSQL 数据库,专为处理大量结构化和半结构化数据而设计,具有高可用性、线性扩展能力和容错特性。Docker 镜像封装了 Apache Cassandra 的运行环境,简化了部署流程,确保环境一致性,并支持快速集成到容器化架构中。
主要用途:
官方维护的 Apache Cassandra Docker 镜像可通过 Docker Hub 获取:
bashdocker pull cassandra:latest # 获取最新稳定版 # 或指定版本(如 4.0) docker pull cassandra:4.0
4.2.1 快速启动
bashdocker run --name cassandra-node1 -d \ -p 7000:7000 \ # 节点间通信端口(内部) -p 7001:7001 \ # SSL 节点间通信端口 -p 9042:9042 \ # CQL 客户端端口(默认 9042) -p 9160:9160 \ # Thrift 客户端端口(已 deprecated,可选) cassandra:latest
4.2.2 验证运行状态
bash# 查看容器日志 docker logs -f cassandra-node1 # 进入容器并连接 CQL Shell docker exec -it cassandra-node1 cqlsh
为避免容器重启后数据丢失,需挂载宿主机目录存储数据:
bashdocker run --name cassandra-node1 -d \ -p 7000:7000 -p 9042:9042 \ -v /path/on/host/cassandra/data:/var/lib/cassandra \ # 数据目录 -v /path/on/host/cassandra/logs:/var/log/cassandra \ # 日志目录 cassandra:latest
注意:宿主机目录需提前创建并赋予权限(如
chmod 777 /path/on/host/cassandra,生产环境建议使用更严格的权限控制)。
通过 -e 参数指定环境变量,覆盖默认配置(无需手动修改 cassandra.yaml)。常用变量如下:
| 环境变量 | 作用描述 | 默认值 |
|---|---|---|
CASSANDRA_CLUSTER_NAME | 集群名称 | Test Cluster |
CASSANDRA_SEEDS | 集群种子节点 IP(用于节点发现) | 容器 IP |
CASSANDRA_LISTEN_ADDRESS | 节点间通信监听地址(内部集群通信) | 容器 IP |
CASSANDRA_RPC_ADDRESS | CQL 客户端通信地址(外部访问) | 0.0.0.0(允许所有 IP) |
CASSANDRA_BROADCAST_ADDRESS | 广播地址(用于跨主机/容器通信时告知其他节点自身可访问地址) | 容器 IP |
CASSANDRA_NUM_TOKENS | 每个节点的令牌数量(影响数据分布均匀性) | 256 |
CASSANDRA_ENDPOINT_SNITCH | 节点位置感知策略(如 SimpleSnitch、GossipingPropertyFileSnitch) | SimpleSnitch |
示例:自定义集群名称和种子节点
bashdocker run --name cassandra-node1 -d \ -e CASSANDRA_CLUSTER_NAME="MyAppCluster" \ -e CASSANDRA_LISTEN_ADDRESS="172.17.0.2" \ # 容器 IP(需提前确认或使用 --network 固定) -p 9042:9042 \ cassandra:latest
通过 Docker Compose 快速搭建多节点集群(以 3 节点为例):
4.5.1 创建 docker-compose.yml
yamlversion: '3.8' services: cassandra-seed: image: cassandra:latest container_name: cassandra-seed ports: - "9042:9042" environment: - CASSANDRA_CLUSTER_NAME=MyCluster - CASSANDRA_SEEDS=cassandra-seed # 种子节点自身 - CASSANDRA_LISTEN_ADDRESS=cassandra-seed # 容器名作为 hostname(需 Docker 网络支持) - CASSANDRA_RPC_ADDRESS=0.0.0.0 volumes: - seed-data:/var/lib/cassandra networks: - cassandra-net cassandra-node1: image: cassandra:latest container_name: cassandra-node1 depends_on: - cassandra-seed environment: - CASSANDRA_CLUSTER_NAME=MyCluster - CASSANDRA_SEEDS=cassandra-seed # 指向种子节点 - CASSANDRA_LISTEN_ADDRESS=cassandra-node1 - CASSANDRA_RPC_ADDRESS=0.0.0.0 volumes: - node1-data:/var/lib/cassandra networks: - cassandra-net cassandra-node2: image: cassandra:latest container_name: cassandra-node2 depends_on: - cassandra-seed environment: - CASSANDRA_CLUSTER_NAME=MyCluster - CASSANDRA_SEEDS=cassandra-seed - CASSANDRA_LISTEN_ADDRESS=cassandra-node2 - CASSANDRA_RPC_ADDRESS=0.0.0.0 volumes: - node2-data:/var/lib/cassandra networks: - cassandra-net volumes: seed-data: node1-data: node2-data: networks: cassandra-net: driver: bridge
4.5.2 启动集群
bashdocker-compose up -d
4.5.3 验证集群状态
bash# 进入种子节点容器 docker exec -it cassandra-seed nodetool status # 预期输出(3 个节点均为 UN 状态,即 Up/Normal): # Datacenter: datacenter1 # =============== # Status=Up/Down # |/ State=Normal/Leaving/Joining/Moving # -- Address Load Tokens Owns (effective) Host ID Rack # UN 172.20.0.2 70.52 KiB 256 66.2% xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rack1 # UN 172.20.0.3 68.4 KiB 256 67.9% xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rack1 # UN 172.20.0.4 68.4 KiB 256 65.9% xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rack1
4.6.1 备份(使用 nodetool snapshot)
bash# 进入容器创建快照 docker exec -it cassandra-node1 nodetool snapshot -t my_backup my_keyspace # 快照默认存储路径:/var/lib/cassandra/data/<keyspace>/<table>-<uuid>/snapshots/my_backup # 通过挂载卷将快照复制到宿主机: docker cp cassandra-node1:/var/lib/cassandra/data/my_keyspace/ /path/on/host/backups/
4.6.2 恢复
bash# 将备份数据复制到目标节点 docker cp /path/on/host/backups/my_keyspace cassandra-node1:/var/lib/cassandra/data/ # 进入容器恢复快照 docker exec -it cassandra-node1 nodetool refresh my_keyspace my_table
volumes 挂载宿主机目录(避免容器内存储性能瓶颈)。CASSANDRA_BROADCAST_ADDRESS 需设置为宿主机可访问的 IP。--cpus 2 -m 4g),避免资源竞争导致性能下降。cassandra.yaml 中的 server_encryption_options),并限制 RPC 访问 IP。您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务