如何使用Python访问Docker容器中的Scyllab?

如何使用Python访问Docker容器中的Scyllab?,python,ubuntu,docker,nosql,scylla,Python,Ubuntu,Docker,Nosql,Scylla,我已经按照规定用锡拉布搭建了码头集装箱。我创建了键空间和表。现在我想在这个表中插入一些数据。我想知道我能做这个吗?我发现了一个例子: 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, e

我已经按照规定用锡拉布搭建了码头集装箱。我创建了键空间和表。现在我想在这个表中插入一些数据。我想知道我能做这个吗?我发现了一个例子:

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)]
找不到记录器“thrift.transport.TSocket”的处理程序
回溯(最近一次呼叫最后一次):
文件“scylla_test.py”,第2行,在
con=cql.connect('localhost',9160,'logs',cql\u version='3.0.0')
文件“/usr/local/lib/python2.7/dist packages/cql/connection.py”,第143行,在connect中
一致性水平=一致性水平,传输=传输)
文件“/usr/local/lib/python2.7/dist packages/cql/connection.py”,第59行,在__
self.building_connection()
文件“/usr/local/lib/python2.7/dist-packages/cql/thrifties.py”,第151行,在建立连接中
self.transport.open()
打开文件“/usr/local/lib/python2.7/dist packages/thrift/transport/tttransport.py”,第271行
返回self.\u trans.open()
文件“/usr/local/lib/python2.7/dist packages/thrift/transport/TSocket.py”,第113行,打开
引发TTTransportException(TTTransportException.NOT_OPEN,msg)
thrift.transport.ttTransport.ttTransportException:无法连接到[('::1',9160,0,0),('127.0.0.1',9160]中的任何一个]

容器的“localhost”地址在容器本身外部无法访问

您可能需要执行以下操作。首先确保Scyllab节点正在使用

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
如果所有节点的状态都为“关闭”(DN),则可能需要首先将其打开

现在,使用显示的已启动节点的地址。如果集群中有多个节点,这些地址中的任何一个都可以。如果cqlsh安装在您的系统中,您可以首先尝试手动连接它:

cqlsh 172.17.0.2

否则,只需将其放入Python脚本并运行即可。

您可以使用端口9042进行检查,这是默认的CQL端口。9160是旧货港,现在很少使用。 此外,您是否可以确保正在转发端口,例如:


docker run——说出一些“锡拉”的名字\
--卷/var/lib/scylla:/var/lib/scylla\
-P9042:9042-P7000:7000-P7001:7001-P7199:7199\
-第9160:9160页-第9180:9180页-第10000:10000页\
-d锡拉开发银行/锡拉——供应过剩1

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