从docker容器执行时cqlsh失败

时间:2017-12-28 17:39:02

标签: docker cassandra connection dockerfile cqlsh

我在Docker容器中初始化Cassandra数据库时遇到问题。 这是我的Dockerfile:

FROM cassandra
COPY ./createTable.cql /tmp/createTable.cql
RUN cqlsh -f /tmp/createTable.cql

当我执行docker build . -t cassandra时,我在cqlsh处收到错误:

Connection error: ('Unable to connect to any servers', {'127.0.0.1': error(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})

但是当我在Docker容器外部执行时,相同的命令工作正常。 为什么拒绝连接?如果我做错了,我怎么能初始化我的 数据库?

感谢您提供任何帮助或建议。

2 个答案:

答案 0 :(得分:1)

构建容器时执行RUN,而不是在容器执行时执行。

你需要编写将启动Cassandra的自定义脚本(与原始容器相同 - 查看Cassandra的Dockerfile),然后等到它开始,然后才通过cqlsh执行命令。

答案 1 :(得分:0)

cqlsh命令需要运行Cassandra的主机名,如果未提供主机名,则将使用localhost(127.0.0.1)作为主机名。

在你的情况下,它将localhost作为主机名,看起来你的Cassandra正在容器之外运行,因为当你从外面运行并且从容器内部失败时它正常工作。

将主机名传递给cqlsh也可以在容器内部运行时解决问题。

cqlsh <hostname or ip> -f /tmp/createTable.cql