我正在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")})
1条答案
按热度按时间xxe27gdn1#
只要稍加修改,就有可能实现与Scylla的连接,Scylla在本地开发的容器之外的容器中运行。
我已经尝试了M1 Mac与Docker桌面:
--listen-address 0.0.0.0
用于简化,因为我们在容器内生成Scylla,以允许从任何网络连接到容器--listen-address
设置为0.0.0.0
,则需要--broadcast-rpc-address 127.0.0.1
。我们要将9042
从容器端口转发到主机(本地),因此这是一个可访问的IP。生成容器的最后一个命令是:
-p 127.0.0.1:9042:9042
用于使主机(本地)上的端口9042可访问。pip3 install scylla-driver
,因为它支持darwin/arm64
体系结构。免责声明:我不是一个Maven在锡拉的配置,所以请随时指出一个更好的方法。