首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个docker镜像之间的通信

两个docker镜像之间的通信
EN

Stack Overflow用户
提问于 2019-01-23 20:56:33
回答 1查看 174关注 0票数 0

我有一个名为spark-docker的spark的docker镜像和卡桑德拉官方的docker镜像cassandra。我想从spark-docker运行一个spark-submit作业,它将在cassandra中写入数据。

spark-dockerDockerfile如下:

代码语言:javascript
复制
FROM bde2020/spark-python-template:2.4.0-hadoop2.7

MAINTAINER Rafiul

RUN pip install --upgrade pip
RUN pip install pyspark cassandra-driver

我使用以下命令来完成此操作。

代码语言:javascript
复制
docker run -ti --network=dockers_default spark-dcoker:latest /spark/bin/spark-submit --conf spark.cassandra.connection.host=cassandra  --packages datastax:spark-cassandra-connector:2.4.0-s_2.11 /app/data_extractor.py -f /app/dataset.tar

这将从dataset.tar中提取数据并将数据保存在cassandra中。

但是我得到了以下错误

代码语言:javascript
复制
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")})

在我的python代码中,我做到了这一点:

代码语言:javascript
复制
from cassandra.cluster import Cluster


class CassandraSchemaGenerator:
    def __init__(self, keyspace):
        self.keyspace = keyspace
        self.cluster = Cluster()
        self.cluster_conn = self.cluster.connect()

如何获取运行cassandra的IP地址和端口号,并将其放入我的python代码中,以便连接到cassandra?

EN

回答 1

Stack Overflow用户

发布于 2019-01-23 21:19:19

除非您不使用network=host,否则不能使用127.0.0.1从一个容器连接到另一个容器。

因此,您可以执行以下操作之一:

启动容器时切换到network=host模式(该模式不需要端口消耗)

或者(最好)将两个容器连接到您的网络中,并使用容器名称作为主机名在它们之间进行连接:

代码语言:javascript
复制
docker network create foo
docker run --network=foo -d  --name=cassy cassandra
docker run --network=foo -ti --name=spark spark-docker:latest ...

注意name参数-这允许容器具有人类可读的名称。现在,您可以从spark使用主机名cassy而不是ip连接到cassandra

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54327807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档