如何使用Python访问运行在Docker容器中的ScyllaDB?

5

我按照官方文档的步骤在Docker容器中设置了ScyllaDB,并创建了键空间和表。现在我想向这个表中插入一些数据,但不知道该怎么做。我找到一个示例:

import cql
con = cql.connect('localhost', 9160,  'logs', cql_version='3.0.0')
print ("Connected!")
cursor = con.cursor()
CQLString = "INSERT INTO event_attend (event_id, event_type, event_user_id) VALUES (131, 'Party', 3156);"
cursor.execute(CQLString)

然而,我收到了下面的错误。我找不到任何示例来展示如何在Docker中完成它。有什么想法吗?
No handlers could be found for logger "thrift.transport.TSocket"
Traceback (most recent call last):
  File "scylla_test.py", line 2, in <module>
    con = cql.connect('localhost', 9160,  'logs', cql_version='3.0.0')
  File "/usr/local/lib/python2.7/dist-packages/cql/connection.py", line 143, in connect
    consistency_level=consistency_level, transport=transport)
  File "/usr/local/lib/python2.7/dist-packages/cql/connection.py", line 59, in __init__
    self.establish_connection()
  File "/usr/local/lib/python2.7/dist-packages/cql/thrifteries.py", line 151, in establish_connection
    self.transport.open()
  File "/usr/local/lib/python2.7/dist-packages/thrift/transport/TTransport.py", line 271, in open
    return self.__trans.open()
  File "/usr/local/lib/python2.7/dist-packages/thrift/transport/TSocket.py", line 113, in open
    raise TTransportException(TTransportException.NOT_OPEN, msg)
thrift.transport.TTransport.TTransportException: Could not connect to any of [('::1', 9160, 0, 0), ('127.0.0.1', 9160)]
2个回答

9
请检查默认的CQL端口9042,而9160是Thrift端口,这些天很少使用。另外,请确保转发端口,例如:
docker run --name some-scylla \ --volume /var/lib/scylla:/var/lib/scylla \ -p 9042:9042 -p 7000:7000 -p 7001:7001 -p 7199:7199 \ -p 9160:9160 -p 9180:9180 -p 10000:10000 \ -d scylladb/scylla --overprovisioned 1

如果您在Windows下使用VirtualBox,请不要忘记在VirtualBox设置中映射端口转发。 - snowindy

2
容器的“localhost”地址无法在容器外部访问。
您可能需要执行以下操作。首先,请使用以下命令确保ScyllaDB节点正在运行。
docker exec -it scylla nodetool status

它应该输出类似于以下内容:
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  172.17.0.2  153.41 KB  256          100.0%            70a72849-5608-47d5-8c8d-0f1db0f57444  rack1

如果所有节点的状态都是“down”(DN),您可能需要先将它们启动。现在,使用处于活动状态的节点的显示地址。如果您的集群中有多个节点,则任何一个地址都可以。如果系统中安装了cqlsh,您可以先尝试手动连接。请保留HTML标签。
cqlsh 172.17.0.2

否则,将其放入您的Python脚本中并运行即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接