cassandra 访问Docker容器外的Scyllladb群集时出错

wgeznvg7  于 2022-11-05  发布在  Cassandra
关注(0)|答案(1)|浏览(172)

我正在Docker容器中本地运行Scylladb,并且我想访问Docker容器之外的集群。这时我收到了以下错误:cassandra.cluster.NoHostAvailable:('无法连接到任何服务器')
第一个
我在端口9042上使用cqlsh访问集群没有问题:

Connected to  at 172.17.0.2:9042.
[cqlsh 5.0.1 | Cassandra 3.0.8 | CQL spec 3.3.1 | Native protocol v4]

现在,我尝试从我的fastapi应用程序访问集群,该应用程序位于docker容器之外。

from cassandra.cluster import Cluster

cluster = Cluster(['172.17.0.2'])

session = cluster.connect('Test Cluster')

下面是我得到的错误:

raise NoHostAvailable("Unable to connect to any servers", errors)
cassandra.cluster.NoHostAvailable: ('Unable to connect to any servers', {'172.17.0.2:9042': OSError(51, "Tried connecting to [('172.17.0.2', 9042)]. Last error: Network is unreachable")})
xxe27gdn

xxe27gdn1#

只要稍加修改,就有可能实现与Scylla的连接,Scylla在本地开发的容器之外的容器中运行。
我已经尝试了M1 Mac与Docker桌面:

  • 使用两个新参数[src]运行scylla容器:
  • --listen-address 0.0.0.0用于简化,因为我们在容器内生成Scylla,以允许从任何网络连接到容器
  • 如果--listen-address设置为0.0.0.0,则需要--broadcast-rpc-address 127.0.0.1。我们要将9042从容器端口转发到主机(本地),因此这是一个可访问的IP。

生成容器的最后一个命令是:

$ docker run --rm -ti \
   -p 127.0.0.1:9042:9042 \
   scylladb/scylla \
       --smp 1 \
       --listen-address 0.0.0.0 \
       --broadcast-rpc-address 127.0.0.1

-p 127.0.0.1:9042:9042用于使主机(本地)上的端口9042可访问。


# so74265199.py

from cassandra.cluster import Cluster

cluster = Cluster(['127.0.0.1'])

session = cluster.connect()

# Select from a table that is available without keyspace

res = session.execute('SELECT * FROM system.versions')
print(res.one())
  • 运行脚本
$ python3 so74265199.py
Row(key='local', build_id='71178cf6db7021896cd8251751b78b3d9e3afa8d', build_mode='release', version='5.0.5-0.20221009.5a97a1060')

免责声明:我不是一个Maven在锡拉的配置,所以请随时指出一个更好的方法。

相关问题