python - Docker - 将 Cassandra 容器与另一个容器链接

标签 python docker cassandra

大家好 :) 我是 Docker 新手!我一直在尝试在 Ubuntu 16.04 上创建一个基于 Cassandra 的容器,并从同一台计算机上的另一个容器链接到它。目标是使用 Python 的 Cassandra 驱动程序从第二个容器访问数据库。

我按如下方式创建 Cassandra 驱动程序,公开所有端口:

docker run -d --name some-cassandra -p 7000:7000 -p 7001:7001 -p 7199:7199 -p 9042:9042 -p 9160:9160 --rm -t cassandra

并与另一个容器链接,如下所示:

run --name python-container \
--volume=$HOME/cassandra/output:/output --rm \
--link some-cassandra:cassandra \
-d custom-cassandra:latest

custom-cassandra是一个自定义的Docker镜像,主要安装Python、pip和cassandra-driver。然后,我使用以下方法连接到第二个容器:

docker exec -it python-container python

但是,以下代码失败:

from cassandra import ConsistencyLevel, OperationTimedOut, WriteTimeout
from cassandra.cluster import Cluster
from cassandra.query import SimpleStatement
session = Cluster(['localhost']).connect()

错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "cassandra/cluster.py", line 1247, in cassandra.cluster.Cluster.connect
  File "cassandra/cluster.py", line 1283, in cassandra.cluster.Cluster.connect
  File "cassandra/cluster.py", line 1270, in cassandra.cluster.Cluster.connect
  File "cassandra/cluster.py", line 2773, in cassandra.cluster.ControlConnection.connect
  File "cassandra/cluster.py", line 2816, in cassandra.cluster.ControlConnection._reconnect_internal
cassandra.cluster.NoHostAvailable: ('Unable to connect to any servers', {'127.0.0.1': error(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused"), '::1': error(99, "Tried connecting to [('::1', 9042, 0, 0)]. Last error: Cannot assign requested address")})

请问我的链接做错了什么?

最佳答案

在 pyton 脚本中使用容器的名称 (some-cassandra),而不是 localhost。容器内的 localhost 始终指容器本身,而不是主机。


此外,您还可以使用 docker-compose 一起启动多个容器,而不是一个一个地创建容器。以下是更多信息的链接:https://docs.docker.com/compose/gettingstarted/#step-2-create-a-dockerfile

基本上,您可以使用应用程序构建一个 docker 镜像,创建一个 docker-compose 文件并启动它。

docker-compose.yml:

version: '3'

services:
  casandra:
    image: cassandra:latest

  myapp:
    image: mypythonapplicaiton
    depends_on:
      - casandra
    environment:
      - CASSANDRA_HOST=cassandra 

(您的应用程序可以从环境变量CASSANDRA_HOST或您调用该变量的方式获取cassandra主机)

然后使用docker-compose up -d启动它。

关于python - Docker - 将 Cassandra 容器与另一个容器链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50592682/

相关文章:

cassandra - Cassandra 读取错误

amazon-ec2 - Cassandra 内存不足(堆空间)

python - 如何使用 python 运行 Azure CLI 命令?

python - 如何将 Pandas 中的行折叠为列?

python - 根据共同值(value)合并 2 个字典列表

python - 如何将askopenfilename()返回值作为参数传递给内置python函数open

docker - sed 操作在 Dockerfile 中被覆盖

docker - Deno dockerfile 天龙

php - Dockerfile Image 命令 '/bin/sh -c apt-get install -y mysqld-server' 返回非零代码 : 100

database - 什么是 cassandra 模式来服务于这个查询?