我在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容器外部执行时,相同的命令工作正常。 为什么拒绝连接?如果我做错了,我怎么能初始化我的 数据库?
感谢您提供任何帮助或建议。
答案 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