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

Docker Compose中service_completed_successfully致Cassandra容器退出码2

问题分析与解决思路

现象汇总

  • Docker Compose里给dd_dew容器配置依赖cassandra_populator,并使用condition: service_completed_successfully条件时,cassandra_populator会以状态码2退出
  • 删掉这个依赖条件后,cassandra_populator能正常以状态码0退出
  • cassandra_populator通过Dockerfile执行cassandra-setup.sh脚本,脚本用cqlsh连接dd_cassandra容器执行schema.cql做数据初始化,日志显示Cassandra完成数据截断操作后,容器立刻以状态码2退出

调试过程

  • 在脚本的cqlsh dd_cassandra -f "${WORKSPACE}/schema.cql"命令后加echo "AFTER cqlsh",容器就能正常返回状态码0;删掉这个echo语句,状态码2的问题又出现
  • 注释掉脚本里合并schema.cql和alter.cql的两行代码后,脚本执行成功,状态码正常

根因定位

合并后的schema.cql和alter.cql里存在Cassandra语句异常(比如语法错误、操作不存在的资源、权限问题等),导致cqlsh命令返回非0状态码。因为脚本默认会以最后一条命令的状态码作为整体退出码,当后续没有其他命令时,脚本就继承了cqlsh的错误码2;而添加echo命令后,echo执行成功返回的状态码0覆盖了之前的错误码,所以脚本整体返回0。

解决建议

  1. 逐行检查schema.cql和alter.cql里的CQL语句,重点排查数据截断操作之后的内容,确认是否存在语法错误、无效的键空间/表操作、权限不足等问题
  2. 在cqlsh命令后添加错误捕获逻辑,避免后续命令掩盖真实问题,示例:
    cqlsh dd_cassandra -f "${WORKSPACE}/schema.cql"
    if [ $? -ne 0 ]; then
        echo "CQL脚本执行失败"
        exit 1
    fi
    
  3. 不要用echo这类无关命令掩盖脚本的真实执行状态,确保每一步操作的错误都能被及时发现和处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:05:26