我在Docker上运行Cassandra时获得了R& D任务。我正在研究XUbuntu 14.04.2 64位(安装在Windows7 32位操作系统的VirtualBOX上)。
我正在按照Docker on Ubuntu和Pokle cassandra教程中给出的步骤进行操作,当我尝试使用nodetool检查特定节点的状态时,我得到了 ConnectException 。
以下是我所做的步骤列表。
asela@teamlk:~$ docker run -d --name cass1 poklet/cassandra start
7b2ddfb60adf1c270a425c4440fe263e1fe56f5dc1c3205372bee3b8626e0624
asela@teamlk:~$ docker run -d --name cass2 poklet/cassandra start $(/data/cassandra/scripts/ipof.sh cass1)
4f98a194214e603242279226bb94cee20774058e84b6d0171a8d14d648e19016
asela@teamlk:~$ docker run -d --name cass3 poklet/cassandra start $(/data/cassandra/scripts/ipof.sh cass1)
394f9ce918121c0b79ed8282ba95c8f1badd4e3536d4ad3f24c4c21651e50b3c
asela@teamlk:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
394f9ce91812 poklet/cassandra:latest "start 172.17.0.1" 6 seconds ago Up 3 seconds 22/tcp, 7000-7001/tcp, 7199/tcp, 8012/tcp, 9042/tcp, 9160/tcp, 61621/tcp cass3
4f98a194214e poklet/cassandra:latest "start 172.17.0.1" 31 seconds ago Up 29 seconds 22/tcp, 7000-7001/tcp, 7199/tcp, 8012/tcp, 9042/tcp, 9160/tcp, 61621/tcp cass2
7b2ddfb60adf poklet/cassandra:latest "start" About a minute ago Up About a minute 22/tcp, 7000-7001/tcp, 7199/tcp, 8012/tcp, 9042/tcp, 9160/tcp, 61621/tcp cass1
asela@teamlk:~$ docker run -i -t poklet/cassandra nodetool -h $(/data/cassandra/scripts/ipof.sh cass1) status
nodetool: Failed to connect to '172.17.0.1:7199' - ConnectException: 'Connection refused'.
ifconfig 告诉我我的Docker在172.17.42.1上运行
如果我错过任何配置和/或我做错了什么,有人可以告诉我吗?
答案 0 :(得分:6)
我正在使用Fedora 22,但我不明白为什么它不应该在Ubuntu上工作。
我遇到了完全相同的问题,以下命令对我有用:
docker exec cass-1 nodetool status
请注意, cass1 是cassandra节点的docker容器的名称,而不是IP地址。
我的输出:
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 172.17.0.14 51.6 KB 256 100.0% 3dec79f4-4a6f-46e6-b4d5-14b8f56b6c13 rack1
答案 1 :(得分:3)
我有点晚了,但这里有一些见解:
如果启动docker容器,则需要将端口映射到外部世界或将容器链接在一起。
端口映射由-p参数在启动Docker容器时完成。 可以找到文档:https://docs.docker.com/articles/networking/
使用--link参数完成Containerlinking,它就好像两个链接容器都在同一主机上运行一样。文档:https://docs.docker.com/userguide/dockerlinks/
要使您的示例正常工作(通过其IP访问其他容器),您必须公开端口。对于cassandra,这将是
-p 7000:7000 -p 9160:9160 -p 9042:9042 -p 7199:7199
For Reference这是我在2个物理主机上执行的命令,用于启动cassandra集群。由于端口映射,每个主机只能启动一个实例! (要使容器与命令行分离,您需要添加-d开关)
docker run --rm --name cassandra-`hostname \
-v /data/cassandra/projectname:/var/lib/cassandra/data \
-e CASSANDRA_CLUSTER_NAME=project-database
-e CASSANDRA_BROADCAST_ADDRESS=`hostname`
-p 7000:7000 -p 9160:9160 -p 9042:9042 -p 7199:7199 \
-e CASSANDRA_SEEDS=<ip_of_host1>,<ip_of_host2>
cassandra:2.2.1
答案 2 :(得分:1)
在cassandra-env.sh中有一个设置“LOCAL_JMX”。默认情况下为“是”,将其设置为“no”将允许远程连接到端口7199.
此外,您可以通过添加以下内容在同一配置文件中禁用身份验证: JVM_OPTS =“$ JVM_OPTS -Dcom.sun.management.jmxremote.authenticate = false”
- 关于pokle的docker镜像,我已经对上面的更改发出了一个pull请求,start.sh(github.com/pokle/cassandra/pull/28)已合并,现在docker镜像应该在README.md中按预期工作。
答案 3 :(得分:0)
我添加了这一行 -“ LOCAL_JMX = no” 到我的docker-compose.yml文件,所以我有一个部分
environment:
- "MAX_HEAP_SIZE=256M"
- "HEAP_NEWSIZE=128M"
- "LOCAL_JMX=no"
答案 4 :(得分:0)
使用docker的exec
代替run
。
世界上大多数Cassandra映像都带有合理的,仅限本地的JMX配置。但是,有时很容易对命令在哪里运行感到困惑。 docker run
将始终启动一个新容器(概念上是一个小型VM)来执行命令。 docker exec
将连接到已经运行的容器并在其中执行命令。由于我们在谈论通过nodetool
进行的仅本地JMX控件,因此我们需要exec
在cassandra本身运行的同一个容器中运行命令。
$ docker run -d cassandra:3.0
6ebda615efd2f997f95aece8f7e8ae0faafa72145a3225831fe31513557dc2bb
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ebda615efd2 cassandra:3.0 "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp confident_margulis
$ docker run cassandra:3.0 nodetool status
nodetool: Failed to connect to '127.0.0.1:7199' - ConnectException: 'Connection refused (Connection refused)'.
$ docker exec 6ebda615efd2 nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 172.17.0.2 103.06 KB 256 100.0% 72bc1f12-538c-4222-9931-40aab96089b3 rack1
请注意,exec
命令要求使用正在运行的容器的标识符,其中run
采用映像名称。