从 docker 容器执行时 cqlsh 失败

cqlsh is failing when executed from docker container

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

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 容器外执行时,相同的命令工作正常。 为什么连接被拒绝?如果我做错了,我该如何初始化我的 数据库 ?

感谢您的帮助或建议。

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

您需要编写将启动 Cassandra 的自定义脚本(与原始容器中的脚本相同 - 查看 Cassandra 的 Dockerfile),然后等待它启动,然后才启动 - 通过 [=12= 执行命令].

cqlsh 命令需要 Cassandra 运行ning 所在的主机名,如果未提供主机名,它将采用本地主机 (127.0.0.1) 作为主机名。

在你的例子中,它以 localhost 作为主机名,看起来你的 Cassandra 运行 正在容器之外,因为这个原因当你从外部 运行 并且失败时它工作正常容器内。

当您的 运行 它也在容器中时,将主机名传递给 cqlsh 应该可以解决您的问题。

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