使用另一个容器连接cassandra容器

fnatzsnv  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(340)

我正在尝试连接到cassandra容器,并通过自己构建的另一个容器将数据插入数据库。我负责管理Cassandra集装箱

docker pull Cassandra
docker run --name some-cassandra -p 9042:9042 -d cassandra:latest"

下面是我在python程序中尝试连接到cassandra的代码。

cluster = Cluster(contact_points=['127.0.0.1'],port=9042)
session = cluster.connect()

如果我直接在mac上运行程序,它会连接,但如果我将其构建到容器中,它会返回错误:

raise NoHostAvailable("Unable to connect to any servers", errors)
cassandra.cluster.NoHostAvailable: ('Unable to connect to any servers', {'127.0.0.1': ConnectionRefusedError(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})

我建立和运行我的容器

docker build --tag=restful .
docker run -p 4000:80 restful

我是新来码头,我徘徊什么是正确的方式让这两个容器连接和沟通?

0h4hbjxa

0h4hbjxa1#

docker容器被设计为彼此和主机隔离。
您的cassandra数据库正在端口上运行 9042 在容器内部以及主机上。争论 -p 9042:9042 通知docker将内部端口9042与主机端口9042绑定。这就是为什么当您从主机(而不是在任何容器中)运行python脚本时 127.0.0.1:9042 与容器连接。
当您将相同的python脚本放在一个单独的容器中时,ip地址 127.0.0.1 不再指向主机,而是指向当前容器。您的python脚本无法连接到cassandra容器,因为这两个容器是相互隔离的。
有两种可能的解决方案:
使用创建网络 docker create network test_net . 然后通过添加参数将两个容器链接到此网络 --network=test_netdocker run 命令。最后通过替换 127.0.0.1 用Cassandra容器的名字 some-cassandra .
(不推荐)启动绑定到主机网络的python脚本容器 --network=host 以便 127.0.0.1 现在指向主机网络。

相关问题