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

标签 java docker cassandra dockerfile

我有一个 java spring boot 应用程序。 该应用程序使用 cassandra 作为数据存储,使用 kafka 进行消息传递。 我正在本地使用 cassandra、zookeeper 和 kafka 的镜像来运行它们。

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

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

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

我需要做什么才能运行应用程序的 docker 容器并连接到 cassandra。

最佳答案

我不知道您在应用程序中使用的连接详细信息(主机:端口)的具体细节,但在这种情况下最常见的错误是使用 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"

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

关于java - 如何为使用 kafka 和 cassandra 的应用程序设置/创建 docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61583415/

相关文章:

Java BFS 算法 - 尝试在 JPanel 上绘制节点

java - 在异常 block 中处理异常

cassandra - 如何使用 QueryBuilder 搜索 cassandra 集合图

java - 获取所有行中最近添加的列?

cassandra - Cassandra 中用于存储重复数据的模型

java - 为什么 "stack[top--] ;"不是一个有效的语句

java - 使用父对象创建子对象的字段实例

docker - 更改通过 kubernetes 中的 pod 配置文件创建的默认容器名称

python-3.x - Dockerfile 在安装权限被拒绝的 python 本地包时失败

docker - 使用在WSL 2中运行的Webpack-dev-server访问LAN上的localhost