如何为使用kafka和cassandra的应用程序设置/创建docker映像

mbskvtky  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(256)

我有一个javaspring启动应用程序。这个应用程序使用cassandra作为数据存储,kafka作为消息传递。我使用Cassandra和zookeeper和Kafka本地运行它们的图像。
我还为我的web应用程序创建了dockerfile,并构建了一个文件来创建一个图像。
我的应用程序运行时,连接到Cassandra数据库。
当我运行应用程序(intelij)时,它通过连接到cassandra(以docker的身份运行)工作正常,但是当我在本地为同一个应用程序运行docker image时,app image容器无法连接到在本地运行的cassandra,因此失败。
我需要做什么,以便我可以运行应用程序的docker容器,还可以连接到cassandra。

kokeuurv

kokeuurv1#

我不知道你的连接细节(host:port)但在这种情况下最常见的错误是 localhost . localhost 当您在docker容器外部启动应用程序时,docker容器中的应用程序与localhost不同。因此,在docker容器中启动应用程序时,必须为cassandra部署指定不同的主机名。
默认情况下,docker将使用容器id作为容器主机名,因此您必须替换 localhost 使用您的cassandra容器id或者使用 --hostname 以便定义要使用的主机名。
最后,一个更优雅的解决方案是使用docker compose文件,其中每个服务的主机名是服务名。这对于启动多个相互“交谈”的服务非常有帮助。
你可以在这里找到我向你解释的关于集装箱主机名的一切。
在这里你也可以找到一个很好的介绍到docker撰写。

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

在这个例子中,每个服务的主机名是web和redis。您可以将其应用于您的compose文件,并为cassandra和kafka使用相应的主机名。

相关问题