所以基本上我试图运行一个cassandra docker实例(2.1)并按照https://hub.docker.com/_/cassandra/的指示运行cqlsh命令。
$ docker run --name some-cassandra -d cassandra:2.1
$ docker run -it --link some-cassandra:cassandra --rm cassandra sh -c 'exec cqlsh "$CASSANDRA_PORT_9042_TCP_ADDR"'
或
$ docker run -it --link some-cassandra:cassandra --rm cassandra cqlsh cassandra
手动一切正常,但是当尝试使用docker-py自动化这个流时,我遇到运行cqlsh shell的问题。 我无法执行cqlsh shell并对我从链接容器运行的cassandra docker容器运行命令。下面,我提供了代码和响应,我得到了各种命令组合,我试图让cqlsh shell工作。任何提示/建议/答案都非常感谢。
这是我正在使用的代码。
import docker
host_config = client.create_host_config(port_bindings={
9042: 9042,
7199: 7199,
7001: 7001
}
)
ctr = client.create_container('cassandra:2.1', name='some-cassandra',
ports=[9042, 7199, 7001],
host_config=host_config
)
# start cassandra container
ctr_id = ctr['Id']
link_path = 'some-cassandra'
link_alias1 = 'cassandra'
link_ctr = client.create_container(
'cassandra:2.1',
command=['/bin/sh'],
host_config=client.create_host_config(
links={link_path: link_alias1},
),
stdin_open=True,
detach=True,
tty=True
)
r=client.start(ctr)
# start another linked container
r=client.start(link_ctr["Id"])
# Try to invoke cqlsh shell to run some commands
for x in [["cat /etc/hosts"], ['cqlsh',"cassandra"], ['cqlsh', '$CASSANDRA_PORT_9042_TCP_ADDR'], ['cqlsh','172.17.0.4', '9042'], ['cqlsh','172.17.0.4', '9160'], ['cqlsh','172.17.0.4', '7199']]:
res = client.exec_create(link_ctr["Id"], cmd=x)
exec_log = client.exec_start(res)
print exec_log
client.stop(link_ctr["Id"])
client.stop(ctr)
client.remove_container(ctr)
client.remove_container(link_ctr)
这是我得到的输出
172.17.0.5 5da36a67e228
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.4 cassandra 000c295fb3c7 some-cassandra
Connection error: ('Unable to connect to any servers', {'cassandra': error(111, "Tried connecting to [('172.17.0.4', 9042)]. Last error: Connection refused")})
Connection error: ('Unable to connect to any servers', {'$CASSANDRA_PORT_9042_TCP_ADDR': gaierror(-2, 'Name or service not known')})
Connection error: ('Unable to connect to any servers', {'172.17.0.4': error(111, "Tried connecting to [('172.17.0.4', 9042)]. Last error: Connection refused")})
Connection error: ('Unable to connect to any servers', {'172.17.0.4': error(111, "Tried connecting to [('172.17.0.4', 9160)]. Last error: Connection refused")})
Connection error: ('Unable to connect to any servers', {'172.17.0.4': error(111, "Tried connecting to [('172.17.0.4', 7199)]. Last error: Connection refused")})
答案 0 :(得分:1)
我通过使用cassandra drover for python解决了这个问题。
原始google群组帖子https://groups.google.com/forum/#!topic/docker-dev/LUEuHWy4GVU
Cassandra驱动程序用于python https://datastax.github.io/python-driver/