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

时间:2020-05-04 00:30:38

标签: java docker cassandra dockerfile

我有一个Java Spring Boot应用程序。 该应用程序将cassandra用作数据存储,并将kafka用作消息传递。 我正在本地使用cassandra和zookeeper和kafka的图像来运行它们。

我还为我的Web应用程序创建了DockerFile,并构建该文件以创建映像。

我的应用程序在运行时,连接到cassandra数据库。

当我运行应用程序(intelij)时,通过连接到cassandra(以docker运行)可以正常工作,但是当我为同一应用程序在本地运行docker image时,应用程序图像容器无法连接到在本地运行的cassandra,并且因此失败。

我需要做些什么,以便我可以运行该应用程序的docker容器并连接到cassandra。

1 个答案:

答案 0 :(得分:0)

我不知道您在应用程序中使用的连接详细信息(主机:端口)的确切细节,但是这种情况下最常见的错误是使用localhost

在docker容器外启动应用程序时,docker容器中的

localhost与localhost不同。因此,在docker容器中启动应用程序时,必须为cassandra部署指定其他主机名。

默认情况下,Docker将使用容器ID作为容器主机名,因此您必须将localhost替换为cassandra容器ID,或者使用--hostname启动cassandra容器,以定义一个您想使用。

最后,一个更优雅的解决方案是使用docker compose文件,其中每个服务的主机名是服务名。这对于一起启动彼此“交谈”的多个服务非常有用。

您可以找到我向您介绍的有关容器here的主机名的所有内容。

here,您可以找到有关docker compose的不错介绍。

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

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