连接到Docker中运行的cassandra

ayu*_*n12 2 cassandra docker

我正试图在一个docker容器中运行Cassandra并从我的Mac(主机)连接到它,但我一直收到Connection拒绝错误.

docker命令:

=> docker run --rm --name cassandra -d cassandra:3.11 -p 9042:9042

=> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                    NAMES
4ecc9dcd8647        cassandra:3.11      "/docker-entrypoin..."   33 minutes ago      Up 33 minutes       7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp   cassandra

=> cqlsh
Connection error: ('Unable to connect to any servers', {'127.0.0.1': 
error(61, "Tried connecting to [('127.0.0.1', 9042)]. Last error: 
Connection refused")})
Run Code Online (Sandbox Code Playgroud)

如果我在实例中执行bash shell:

=> docker exec -it cassandra bash
Run Code Online (Sandbox Code Playgroud)

我可以运行cqlsh并在本地连接到cassandra.

我错过了什么?

san*_*eti 13

端口仍然没有暴露在外面尝试这个

  • docker run -p 9042:9042 --rm --name cassandra -d cassandra:3.11

你应该看到这样的东西吗?

  • 0.0.0.0:9042->9042/tcp

欲了解更多信息:https://docs.docker.com/engine/reference/commandline/run/

  • 谢谢!我很惊讶选项顺序很重要。你知道它是否被记录在某处吗? (2认同)

Adi*_*iii 8

在 docker 镜像名称之后传递的任何内容都会被视为容器入口点的参数。

cassandra:3.11 -p 9042:9042
Run Code Online (Sandbox Code Playgroud)

所以实际上 docker 将-p 9042:9042其作为参数传递给入口点,您可以通过检查 docker 容器来实现这一点。

运行并发布端口

docker run -it  - - name cassandra -e CASSANDRA_PASSWORD=cassandra --rm docker.io/bitnami/cassandra:3-debian-10
Run Code Online (Sandbox Code Playgroud)

一旦容器启动,然后验证连接

docker exec -it cassandra bash -c "cqlsh -u cassandra -p cassandra"
Run Code Online (Sandbox Code Playgroud)