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

使用docker commit保存含Cassandra表的容器镜像失败,求解决方法

问题原因

你遇到的核心问题是:Docker容器的卷挂载导致数据没有被包含在commit的镜像中。

你在docker-compose.yml里将宿主机目录挂载到了容器的/var/lib/cassandra(Cassandra的核心数据存储目录),此时容器内该目录的实际数据存储在宿主机,而非容器自身的文件系统中。docker commit仅会保存容器自身文件系统的内容,不会包含挂载卷的数据,所以新镜像启动后自然找不到已创建的keyspace和表。


解决方案

方案1:临时移除卷挂载后commit镜像

适合快速验证场景:

  1. 修改docker-compose.yml,移除volumes挂载配置:
    version: '3'
    
    services:
      cassandra:
        image: cassandra:latest
        container_name: test-container-student
        ports:
          - 9042:9042
    
  2. 启动容器并等待Cassandra完全就绪:
    docker-compose up -d
    # 查看日志确认启动完成,出现"Startup complete"即可
    docker logs test-container-student
    
  3. 运行你的Program.cs代码创建keyspace和表。
  4. 停止容器(不要删除):
    docker stop test-container-student
    
  5. 提交生成新镜像:
    docker commit test-container-student cassandra-student:v1
    
  6. 验证新镜像:
    # 用新镜像启动容器
    docker run -d --name test-new cassandra-student:v1
    # 进入cqlsh检查表
    docker exec -it test-new cqlsh
    # 执行命令验证
    USE StudentDetails;
    DESCRIBE TABLE students;
    

方案2:用Dockerfile构建自定义镜像(推荐,适合TestContainers)

这种方式更规范、可重复构建,是TestContainers的最佳实践:

  1. 创建初始化CQL脚本init.cql:
    CREATE KEYSPACE IF NOT EXISTS StudentDetails
    WITH replication = {
        'class': 'SimpleStrategy',
        'replication_factor': 1
    };
    
    CREATE TABLE IF NOT EXISTS StudentDetails.students (
        student_id UUID PRIMARY KEY,
        first_name TEXT,
        last_name TEXT,
        age INT
    );
    
  2. 编写Dockerfile:
    FROM cassandra:latest
    
    # 将初始化脚本复制到Cassandra官方镜像的自动执行目录
    COPY init.cql /docker-entrypoint-initdb.d/
    

    说明:Cassandra官方镜像会在容器首次启动、且/var/lib/cassandra为空时,自动执行/docker-entrypoint-initdb.d/目录下的.cql脚本。

  3. 构建镜像:
    docker build -t cassandra-student:v2 .
    
  4. 验证镜像:
    启动容器后,用cqlsh连接即可确认keyspace和表已存在。

注意事项
  • 优先选择Dockerfile方式,它能保证镜像构建的可重复性,更适配自动化测试和CI/CD流程。
  • Cassandra启动需要一定时间,无论是哪种方案,都要等待容器完全启动后再执行初始化或验证操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:00:20