我有一个带有 cassandra 容器的 docker compose 文件。默认情况下,由于 cassandra.yaml 中的 AllowAllAuthenticator,我可以匿名管理数据库,我想要 PasswordAuthenticator。那是我的 docker compose:
cassandra:
image: cassandra:4.1
container_name: "cassdb"
ports:
- 9042:9042
volumes:
- ./cassandra:/var/lib/cassandra
environment:
- CASSANDRA_CLUSTER_NAME=cassclus
我尝试将文件复制到容器外,对其进行编辑并将其发回并重新启动容器。
我还尝试将它复制到容器外,编辑它并用它创建一个卷以便将它加载到 docker compose up 上:
- ./cassandra.yaml:/etc/cassandra/cassandra.yaml
在这两种情况下,每当从容器内部执行 cqlsh 或 cqlsh -u cassandra -p cassandra 时,我都会收到该错误(我以前没有):
Connection error: ('Unable to connect to any servers', \
{'127.0.0.1:9042': ConnectionRefusedError(111, \
"Tried connecting to [('127.0.0.1', 9042)]. \
Last error: Connection refused")})
我什至尝试添加带有卷的容器,但没有更改我从容器导入的 .yaml,所以我认为它与 PasswordAuthenticator 值本身无关,而是与整个文件相关。
我的主机是Windows,我正在用Visual Studio Code编辑文件,我不知道这是否有什么关系。
已解决:我不够耐心,工作正常但只需要几分钟来重建整个容器环境。
这个问题不断出现,所以我在这里发布,以供将来遇到此问题的人使用。
cqlsh 返回的连接错误几乎总是以下两种情况之一:
在这种情况下,它是第 (1) 点,因为操作员没有等待足够长的时间来启动 Cassandra 实例。
操作员注意事项:检查 Cassandra 日志应该是解决问题时的第一步。即使部署在 Docker 容器中,Cassandra 仍然需要执行其启动顺序,而且不是即时的。干杯!