我正在尝试连接到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
我是新来码头,我徘徊什么是正确的方式让这两个容器连接和沟通?
1条答案
按热度按时间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_net
在docker run
命令。最后通过替换127.0.0.1
用Cassandra容器的名字some-cassandra
.(不推荐)启动绑定到主机网络的python脚本容器
--network=host
以便127.0.0.1
现在指向主机网络。