通过 cqlsh 使用 docker 远程访问 cassandra 4.0.1

Remote access to cassandra 4.0.1 using docker via cqlsh

我的环境:

Docker 命令:

docker run --name cassandra-node-0 -p 7000:7000 -p 7001:7001 -p 7199:7199 -p 9042:9042 -p 9160:9160 -e CASSANDRA_CLUSTER_NAME=MyCluster -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch -e CASSANDRA_DC=datacenter1 -e CASSANDRA_BROADCAST_ADDRESS=192.168.1.101 -d cassandra

CQLSH 命令:

docker run -it -e CQLSH_HOST=$(docker inspect --format='{{ .NetworkSettings.IPAddress}}' cassandra-node-0) --name cassandra-client --entrypoint=cqlsh cassandra

我尝试在同一台电脑的 WSL2 中使用 ubuntu 中的 cqlsh 连接 cassandra 节点。
我没有更改所有 *.yaml 文件,只使用 Docker Env。
当我将节点的 docker 网络 ip 插入到 CQLSH_HOST 时,cqlsh 成功连接节点。
但是,当我插入我的私有 ip,public ip 或 127.0.0.1 时,cqlsh 被拒绝连接到节点。
当来自不同网络的节点连接时,这显示了相同的问题。
我想我缺少一些设置 Docker Env.
我缺少什么设置?
[更新] 我在防火墙中添加了一些端口转发规则但同样的问题。
[更新 2] docker ps -a 结果:

0.0.0.0:7000-7001->7000-7001/tcp, :::7000-7001->7000-7001/tcp, 0.0.0.0:7199->7199/tcp, :::7199->7199/tcp, 0.0.0.0:9042->9042/tcp, :::9042->9042/tcp, 0.0.0.0:9160->9160/tcp, :::9160->9160/tcp

尝试在 运行 Cassandra 时添加 --hostname--network。例如:

$ docker run --rm -d
    --name cassandra-node-0
    --hostname cassandra-node-0
    --network cassandra-node-0
    

您会发现通过添加以下内容可以更轻松地通过 cqlsh 进行连接:

  --network cassandra-node-0
  -e CQLSH_HOST=cassandra-node-0

到您的 docker run 命令。干杯!