大家好 :) 我是 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/