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

Docker容器间Cassandra远程cqlsh连接失败及传参停滞问题排查

Cassandra容器连接及Schema初始化问题排查与解决

问题背景

使用Docker Compose部署db_cassandra和remote_cassandra两个服务,remote_cassandra需远程连接db_cassandra执行Schema初始化脚本,但脚本陷入无限循环,日志提示socket.gaierror无法解析db_cassandra主机名。后续尝试通过CMD传参给脚本,容器执行仍停滞。


现有配置文件

docker-compose.yml

version: "3"
services:
  db_cassandra:
    container_name: db_cassandra
    image: custom.cassandra.image/builder-cassandra
    volumes:
      - "./common/cassandra:/lua/cassandra_setup:rw"
    environment:
      WORKSPACE: "/tmp"
      SERVICES_ROOT_DIR: "/services_root"
    healthcheck:
        test: ["CMD", "cqlsh", "-u", "cassandra", "-p", "cassandra" ]
        interval: 5s
        timeout: 5s
        retries: 60
    ports:
      - "9042:9042"

  remote_cassandra:
    container_name: remote_cassandra
    build:
      context: ../.
      dockerfile: ./it/remote_cassandra/Dockerfile
      args:
        BASE_IMAGE: custom.cassandra.image/builder-cassandra
    depends_on:
      dd_cassandra:
        condition: service_healthy
    volumes:
      - "./common/cassandra:/lua/cassandra_setup:rw"
    environment:
      WORKSPACE: "/tmp"
      SERVICES_ROOT_DIR: "/services_root"

remote_cassandra/Dockerfile(初始版本)

ARG BASE_IMAGE
FROM ${BASE_IMAGE}

COPY ./it/common/cassandra/cassandra-setup.sh /
RUN chmod +x /cassandra-setup.sh

CMD ["/cassandra-setup.sh"]

初始cassandra-setup.sh脚本

#!/bin/bash
#code that creates schema.cql
...
while ! cqlsh db_cassandra -e 'describe cluster' ; do
  echo "waiting for db_cassandra to be up..."
  sleep .5
done
cqlsh db_cassandra -f "${WORKSPACE}/schema.cql"

报错日志

Traceback (most recent call last):
  File "/opt/cassandra/bin/cqlsh.py", line 2357, in <module>
    main(*read_options(sys.argv[1:], os.environ))
  File "/opt/cassandra/bin/cqlsh.py", line 2303, in main
    shell = Shell(hostname,
  File "/opt/cassandra/bin/cqlsh.py", line 463, in __init__
    load_balancing_policy=WhiteListRoundRobinPolicy([self.hostname]),
  File "/opt/cassandra/bin/../lib/cassandra-driver-internal-only-3.25.0.zip/cassandra-driver-3.25.0/cassandra/policies.py", line 425, in __init__
  File "/opt/cassandra/bin/../lib/cassandra-driver-internal-only-3.25.0.zip/cassandra-driver-3.25.0/cassandra/policies.py", line 426, in <listcomp>
  File "/usr/lib/python3.10/socket.py", line 955, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known
waiting for db_cassandra to be up...

修改后的配置(问题未解决)

修改后的Dockerfile

ENTRYPOINT ["/cassandra-setup.sh"]
CMD ["db_cassandra"]

修改后的cassandra-setup.sh脚本

#!/bin/bash
DB_CONTAINER="$1"
#code that creates schema.cql
...
while ! cqlsh $DB_CONTAINER -e 'describe cluster' ; do
  echo "waiting for db_cassandra to be up..."
  sleep .5
done
cqlsh $DB_CONTAINER -f "${WORKSPACE}/schema.cql"

解决方案

1. 修复Docker Compose依赖名称错误

remote_cassandra的depends_on配置中误写为dd_cassandra,实际服务名是db_cassandra,这会导致依赖健康检查失效,remote_cassandra可能提前启动。修改docker-compose.yml中对应部分:

depends_on:
  db_cassandra:
    condition: service_healthy

2. 优化健康检查逻辑

原db_cassandra的健康检查未指定主机,可能存在自身连接问题,修改为明确检查本地连接:

healthcheck:
  test: ["CMD", "cqlsh", "localhost", "-u", "cassandra", "-p", "cassandra", "-e", "SELECT now() FROM system.local"]
  interval: 5s
  timeout: 5s
  retries: 60

3. 调整初始化脚本的连接测试逻辑

原脚本使用describe cluster检查过于严格,且未处理Schema文件未生成的情况,替换为更可靠的连接测试,并增加文件等待逻辑:

#!/bin/bash
# 若未传参则使用默认主机名
DB_HOST="${1:-db_cassandra}"
# 等待schema.cql文件生成
until [ -f "${WORKSPACE}/schema.cql" ]; do
  echo "等待schema.cql文件生成..."
  sleep 1
done
# 测试Cassandra基础连接,设置超时时间
while ! cqlsh "$DB_HOST" -u cassandra -p cassandra --connect-timeout 2 -e 'SELECT now() FROM system.local'; do
  echo "等待db_cassandra服务就绪..."
  sleep 1
done
# 执行Schema初始化
echo "开始执行Schema初始化..."
cqlsh "$DB_HOST" -u cassandra -p cassandra -f "${WORKSPACE}/schema.cql"
echo "Schema初始化完成"

4. 验证网络连通性

Docker Compose默认会为项目创建专属网络,服务名可直接作为DNS解析。若自定义了网络,需确保db_cassandra和remote_cassandra都加入同一网络。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:55:57