你好:)我是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")})
请问链接到底有什么问题?
答案 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
启动它。