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

时间:2018-05-29 20:47:29

标签: 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")})

请问链接到底有什么问题?

1 个答案:

答案 0 :(得分:3)

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

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

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

搬运工-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启动它。